我希望能够有两个Erlang shell交谈。我在OS X上运行。获取两个erl shell在OS X上交谈
我试过tut17示例here。
我也试过:
$ erl -sname foo
,然后在新的终端:
$ erl -sname bar
([email protected])1> net_adm:ping([email protected]).
pang
任何想法?
我希望能够有两个Erlang shell交谈。我在OS X上运行。获取两个erl shell在OS X上交谈
我试过tut17示例here。
我也试过:
$ erl -sname foo
,然后在新的终端:
$ erl -sname bar
([email protected])1> net_adm:ping([email protected]).
pang
任何想法?
这是一种破碎的Mac。默认情况下,mac无法解析其自己的短名称。你的主人的名字可能是“elife.local”。
如果你用名称FQDN启动erl,那么ping将起作用。
即:你将与
$ erl -name [email protected]
这可能可以固定启动它通过使能够解决它自己的短名
的MAC下面是从我的MAC输出的例子。当我这样做时,我得到和你一样的结果。
的第一个节点:
$ erl -name [email protected]
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]
Eshell V5.7.4 (abort with ^G)
([email protected])1>
其他节点:
$ erl -name [email protected]
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]
Eshell V5.7.4 (abort with ^G)
([email protected])1> net_adm:ping('[email protected]').
pong
一个更简单的修复可能只是编辑/ etc/hosts文件,并确保你有这样的事行:
127.0.0.1 localhost elife
我的Mac可以很好地与短名称一起工作,I bel即使这是它做了什么。
这是正确的答案。 Erlang像其他任何东西一样将名称解析为IP地址。作为一般原则,如果发送到相同名称的常规icmp'ping没有被应答,'net_adm:ping'将不起作用。除OSX之外的 – Zed 2010-01-26 07:32:45
将忽略主机文件。还有另一个地方可以在Mac上设置它,不记得在哪里。 编辑:至少它原本做的,还没有尝试过雪豹 – 2010-01-27 12:37:55
还设置127.0.0.1来解决你的主机名会打破很多Java应用程序(任何使用RMI的应用程序)。通常,您希望您的主机名指向您的“公共”IP地址。 – 2010-01-27 12:41:27
对于节点彼此通信,两个应该有相同的cookie。在同一个盒子上,它最终使用来自$ HOME/.erlang.cookie文件的cookie。如果该文件不存在,它会创建一个新文件并在其中放入一些随机cookie。未来的shell使用相同的cookie。但是最好通过setcookie参数在命令行中指定cookie。
erl -name [email protected] -setcookie mycookie
通过命令行参数设置cookie并不是更好,因为同一系统上的其他用户将能够知道您的cookie只是查看过程列表,之后恶意用户将能够发送消息到你的erlang节点。如果您在文件中存储cookie,请不要忘记为该文件设置适当的权限。 – taro 2010-08-17 07:38:41
你是男人,这很好。谢谢。 – Eli 2010-01-26 03:59:39
如果有人得到这个错误,* 1:语法错误在'。'之前,那么一定要用单引号包装这个名字。 net_adm:中国平安('[email protected]')。 – Coderdad 2013-03-11 21:01:57