首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用epmd启动erlang

不使用epmd启动erlang
EN

Stack Overflow用户
提问于 2014-02-24 20:35:18
回答 2查看 1.2K关注 0票数 4

我试图将epmd与erlang分开启动,以便对连接处理进行监视。

这很好,除了当vm在epmd之前启动时。

有没有一种方法可以让erlang在不自行启动epmd的情况下启动?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 12:36:15

可能有用的问题/答案:

因此,根据这些问题/答案,我建议使erlang服务依赖于epmd (它本身应该是另一个服务)。此外,如果您将epmd作为第一批运行的服务之一运行,那么应该可以在erlang之前每次运行它。但是,如何做到这一点实际上将取决于您的操作系统和部署实现细节。

另外,一个不太优雅的解决方案是更改init脚本,因此它将等待epmd启动,但需要手动启动。您的里程可能会有所不同,一个非常天真的方法(但作为一个示例)可能如下所示:

代码语言:javascript
复制
    while [ true ]; do
      pid=`pidof epmd`;
      if [ "$pid" == "" ]; then
        sleep 1; # Wait a bit more
      else
        break;
      fi
    done
    # Continue initialization

请注意,代码应该考虑尽可能多的尝试,而且pidof只在linux上工作,等等。我不确定我是否喜欢这个解决方案,但可以完成这项工作。

作为不那么优雅的解决方案,您可以用您自己的二进制代码替换erlang将运行的epmd,它可以执行您需要的任何操作(比如伪造epmd启动或运行您自己的epmd,如上面的代码中所示)。

希望能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2017-02-10 10:18:37

从Erlang/OTP19.0开始,可以将 command line option设置为true (默认值)或false

如果您在命令行上传递-start_epmd false,并且epmd正在运行,Erlang节点将像往常一样启动。如果epmd没有运行,Erlang节点将无法从以下消息开始:

代码语言:javascript
复制
$ erl -start_epmd false -sname foo
Protocol 'inet_tcp': register/listen error: econnrefused

如果Erlang节点不是作为分布式节点启动的(即,不传递-name-sname),则无论-start_epmd设置如何,它都不会启动或尝试连接到-start_epmd

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21998439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档