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