在没有epmd的情况下启动erlang VM

在没有epmd的情况下启动erlang VM,erlang,epmd,Erlang,Epmd,我试图从erlang vm中单独启动epmd,以便对连接处理进行监视 这很好,除了在epmd之前启动vm的情况 有没有一种方法可以让erlang vm在不启动epmd的情况下启动?可能的有用问题/答案: 因此,根据这些问题/答案,我建议让ErlangVM服务依赖于epmd(它应该是另一个独立的服务)。另外,如果您将epmd作为第一个运行的服务之一运行,那么每次都应该可以在erlang之前启动它。但如何做到这一点实际上取决于您的操作系统和部署实现细节 另外,一个不那么优雅的解决方案是更改i

我试图从erlang vm中单独启动epmd,以便对连接处理进行监视

这很好,除了在epmd之前启动vm的情况


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

可能的有用问题/答案:

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

另外,一个不那么优雅的解决方案是更改init脚本,这样它将等待epmd启动,但需要手动。您的里程数可能会有所不同,一个非常简单的方法(但作为一个例子很有用)是:

    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启动或运行您自己的,如上面的代码)


希望有帮助

从Erlang/OTP 19.0开始,有一个可以设置为
true
(默认值)或
false

如果在命令行上传递
-start\u epmd false
,并且epmd正在运行,则Erlang节点将照常启动。如果epmd未运行,Erlang节点将无法启动,并显示以下消息:

$ erl -start_epmd false -sname foo
Protocol 'inet_tcp': register/listen error: econnrefused
如果Erlang节点未作为分布式节点启动(即未传递
-name
-sname
),则无论
-start\u epmd
设置如何,它都不会启动或尝试连接到epmd