我有以下escript:
#!/usr/bin/env escript
%%! -name test_starter@127.0.0.1
main(_) ->
NodeName = test,
Host = '127.0.0.1',
Args = "",
{ok, _Node} = slave:start_link(Host, NodeName, Args),
io:format("Node started successfully!").
在Ubuntu 10.04上运行时,我得到了这个:
$ ./start_slave
Node started successfully!
$
我想安装自己的Erlang(最新版本,调试透析器编译文件等),因为在Ubuntu上安装Erlang缺少一些功能。我将我的Erlang二进制文件放在~/Applications/bin
中。启动Erlang通常可以正常工作,并且在Erlang shell中启动从属节点也可以正常工作。
然而,现在我的escript不起作用。大约60秒后,它返回一个错误:
$ ./start_slave
escript: exception error: no match of right hand side value {error,timeout}
即使我将第一行更改为escript以使用我的erlang版本,它仍然不起作用:
#!/home/user/Applications/bin/escript
从属节点启动时调用erlang:open_port/2
似乎正在使用sh
,而.bashrc
又未读取设置我的自定义PATH
环境的slave:start_link/3
文件变量。当/etc/environment
等待从节点响应时,似乎发生了超时,这种情况从未发生过。
如何在Ubuntu 10.4上滚动我自己的Erlang安装并在escripts中启动slave节点?
更新:我已尝试在PATH
内添加自定义Erlang的路径(其中设置了Ubuntu中的原始{{1}})但这不会改变任何内容...
更新2:接受给出的唯一答案(即使它没有解决问题)。 Ubuntu和Erlang版本现在有点老了,这可能不再是问题了。
答案 0 :(得分:1)
是否可能使用其他Erlang安装运行从属节点?在the documentation on slave nodes中列出了超时错误的原因我看到“Erlang节点有不同的cookie”,我相信在这种情况下可能会发生。
如果是这种情况,在等待超时时运行ps -FC erlang
应该会显示具有不同路径的进程。