2010-01-26 30 views

回答

9

这是一种破碎的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 
+0

你是男人,这很好。谢谢。 – Eli 2010-01-26 03:59:39

+0

如果有人得到这个错误,* 1:语法错误在'。'之前,那么一定要用单引号包装这个名字。 net_adm:中国平安('[email protected]')。 – Coderdad 2013-03-11 21:01:57

3

一个更简单的修复可能只是编辑/ etc/hosts文件,并确保你有这样的事行:

127.0.0.1 localhost elife

我的Mac可以很好地与短名称一起工作,I bel即使这是它做了什么。

+1

这是正确的答案。 Erlang像其他任何东西一样将名称解析为IP地址。作为一般原则,如果发送到相同名称的常规icmp'ping没有被应答,'net_adm:ping'将不起作用。除OSX之外的 – Zed 2010-01-26 07:32:45

+0

将忽略主机文件。还有另一个地方可以在Mac上设置它,不记得在哪里。 编辑:至少它原本做的,还没有尝试过雪豹 – 2010-01-27 12:37:55

+0

还设置127.0.0.1来解决你的主机名会打破很多Java应用程序(任何使用RMI的应用程序)。通常,您希望您的主机名指向您的“公共”IP地址。 – 2010-01-27 12:41:27

0

对于节点彼此通信,两个应该有相同的cookie。在同一个盒子上,它最终使用来自$ HOME/.erlang.cookie文件的cookie。如果该文件不存在,它会创建一个新文件并在其中放入一些随机cookie。未来的shell使用相同的cookie。但是最好通过setcookie参数在命令行中指定cookie。

erl -name [email protected] -setcookie mycookie

+1

通过命令行参数设置cookie并不是更好,因为同一系统上的其他用户将能够知道您的cookie只是查看过程列表,之后恶意用户将能够发送消息到你的erlang节点。如果您在文件中存储cookie,请不要忘记为该文件设置适当的权限。 – taro 2010-08-17 07:38:41