我正在尝试与 erlang vm 分开启动 epmd,以便对连接处理进行监控。

这工作正常,除了 vm 在 epmd 之前启动的情况。

有没有办法让erlang vm启动而不自己启动epmd?

最佳答案

可能有帮助的问题/答案:

  • Is there a way to stop Erlang servers from automatically starting epmd?
  • Ensure epmd started

  • 因此,根据这些问题/答案,我建议让 erlang vm 服务依赖于 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 - 在没有 epmd 的情况下启动 erlang VM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21998439/

    10-09 22:07