【问题标题】:Starting an Erlang slave node in escript fails when using custom Erlang in Ubuntu 10.4在 Ubuntu 10.4 中使用自定义 Erlang 时,在 escript 中启动 Erlang 从节点失败
【发布时间】:2011-02-24 17:13:53
【问题描述】:

我有以下脚本:

#!/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,而sh 又不读取设置我的自定义PATH 环境变量的.bashrc 文件。当slave:start_link/3 等待从节点响应时似乎会发生超时,但它从来没有这样做过。

如何在 Ubuntu 10.4 上自行安装 Erlang 并在 escripts 中启动从节点?

更新:我尝试在/etc/environment 中添加自定义Erlang 的路径(在Ubuntu 中设置了原始PATH),但这并没有改变任何东西...

更新 2: 接受给出的唯一答案(即使它没有解决问题)。 Ubuntu 和 Erlang 版本现在有点老了,这可能不再是问题了。

【问题讨论】:

  • 您确定要使用start_link 而不是start 吗?这样,当您的脚本自行终止时(在调用 main 之后出现),您的从属服务器会自动退出。请参阅start_link 的文档。
  • 重点是在`start_link/3返回'之前节点启动就超时了。
  • 另外,关键是运行测试,所以当脚本死亡时节点死亡我可以接受。 :-)

标签: ubuntu erlang


【解决方案1】:

从节点是否可能与其他 Erlang 安装一起运行?在the documentation on slave nodes 的超时错误原因下列出我看到“Erlang 节点有不同的 cookie”,我相信这种情况可能会发生。

如果是这种情况,在等待超时时运行 ps -FC erlang 应该会向您显示具有不同路径的进程。

【讨论】:

  • 它实际上并没有启动,或者启动时立即崩溃。我看不到从节点的进程。
  • 无论如何,它应该使用相同的cookie,因为我在~/.erlang.cookie中设置了它
  • 接受这个答案,因为没有给出其他答案。但是一直没有找到解决问题的方法。 :-(
猜你喜欢
  • 2016-11-30
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2011-09-01
  • 2022-08-16
  • 1970-01-01
相关资源
最近更新 更多