我是Erlang的新手。
目前,我创建了一个模块,可以帮助我将用户请求转发到apns库。
我创建了一个gen_server模块并将其添加到主管。
今天,当我使用erl -sname apns_server启动我的模块时。
一切正常。但是我要暂停终端一段时间,连接已被服务器关闭。
然后问题发生了。在与服务器建立新连接后,我可以启动一个新的erl -sname apns_server。
错误消息表示已存在apns_server。我确实在epmd -names中看到了服务器名称。
节点处于活动状态,因为我可以通过rpc:call来发送请求来运行请求。但我不知道如何阻止它!!
该模块的费用仍在开发中,我需要更新一些代码然后重新启动它。我怎样才能做到这一点?在同一台机器上运行其他Erlang服务的费用,我无法重启系统。还有其他方法可以阻止我的模块的Erlang节点吗? 谢谢~~
埃里克
答案 0 :(得分:2)
连接到现有节点:
erl -name some_name -cookie some_cookie
)。^G
(即CTRL+G
)打开终端命令界面。r other_node_name@node.host
以远程连接到另一个节点。j
列出当前作业。将列出您尝试联系的节点上生成的新shell。c [the remote shell's job number]
以连接到您要使用的节点上的新shell。这是我的第一个节点,名为'foo@changa.shinden.tsuriai.jp'
:
ceverett@changa:~$ erl -name foo -cookie bar
Erlang/OTP 20 [RELEASE CANDIDATE 2] [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.0 (abort with ^G)
(foo@changa.shinden.tsuriai.jp)1>
这是我的第二个节点,名为'baz@changa.shinden.tsuriai.jp'
,我将用它来启动另一个节点的远程shell连接。请注意,我已使用相同的 Cookie(选项-cookie bar
)启动此erl会话,如上所述:
ceverett@changa:~$ erl -name baz -cookie bar
Erlang/OTP 20 [RELEASE CANDIDATE 2] [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.0 (abort with ^G)
(baz@changa.shinden.tsuriai.jp)1>
User switch command
--> ?
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s [shell] - start local shell
r [node [shell]] - start remote shell
q - quit erlang
? | h - this message
--> r 'foo@changa.shinden.tsuriai.jp'
--> j
1 {shell,start,[init]}
2* {'foo@changa.shinden.tsuriai.jp',shell,start,[]}
--> c 2
Eshell V9.0 (abort with ^G)
(foo@changa.shinden.tsuriai.jp)1>
注意我的提示是如何在底部更改的?这就是它的全部内容。
这适用于在群集中连接的任何Erlang节点,并且使用长节点名称运行的EPMD如果远程节点能够在网络上看到彼此,则会尝试相互连接。在这种情况下,两个节点都在同一主机上运行,但只要主机可以在网络上看到对方,它就会以相同的方式工作。