如何将 setcookie 添加到 ejabberdctl 到 运行 ejabberd 服务或在启动时不使用 setcookie 连接不同机器上的两个节点?

How can I add setcookie into ejabberdctl to run the ejabberd service or connect two node on different machine without setcookie in startup?

我是 Erlang 新手。目前,我们正在为我们的 xmpp 服务使用 ejabberd。 最近由于一些能力问题,写了一个分布式erlange程序。我需要在两台机器之间 运行 rpc:call 。我可以在 erl 模拟器上成功地完成 rpc:call。但是我们当前的系统使用 ejabberdctl 来启动 ejabberd 服务。我已经检查并尝试修改 ejabberdctl 文件。但是我无法成功添加-setcookie。

ejabberdctl 中的代码部分是

ctlexec()
{ 
    CONN_NAME=; shift
    COMMAND=$@
    $EXEC_CMD "$ERL \
    $NAME ${CONN_NAME} \
    -noinput \
    -hidden \
    -pa $EJABBERD_EBIN_PATH \
    $KERNEL_OPTS \
    -s ejabberd_ctl -extra $ERLANG_NODE $COMMAND"
}

最后两行引起的问题:

  $KERNEL_OPTS \
  -s ejabberd_ctl -extra $ERLANG_NODE $COMMAND"

我想这个文件是以前某个人引用的,但我不知道从哪里来的。 有人知道如何将 -setcookie abc 添加到此 erl 命令吗? 如果我不能更改 ejabberdctl 文件或更糟的情况,我将无法更改当前系统。 即我没有机会将 setcookie 添加到 ejabberd 系统。 如何将我的新节点连接到现有的 ejabberd 节点(我们当前的系统)。

ejabberd 应该先启动。

您的眼皮底下就有解决方案。 ctlexec() 是如何工作的?它 运行s --hidden 节点名为 $NAME ${CONN_NAME},设置选项 $KERNEL_OPTS,将 $EJABBERD_EBIN_PATH 插入搜索路径并使用 ejabberd_ctl:start() 中的一些附加参数调用 ejabberd_ctl:start() =16=]。所以 $KERNEL_OPTS 中必须有 -setcookie Cookie 参数,否则它使用 $HOME/.erlang.cookie 中的默认 cookie。这正是您所需要的。只需用您自己的模块替换 -s ejabberd_ctl 并使用您已有的 $KERNEL_OPTS$ERLANG_NODE 内容。在脚本中搜索 $KERNEL_OPTS$ERLANG_NODE 包含的线索。

这是制作像 ejabberd_ctl 这样的脚本的常用方法。它非常简单和优雅。你只需 运行 你自己的节点设置它 --hidden 这样你就不会打扰集群中的其他节点(如果有的话)。不要忘记设置一些随机节点名称。连接到应用程序节点,然后执行 rpc:call/4,5 即可。通常会有一些像ejabberd_ctl.erl这样的模块让它更舒服,处理额外的参数等等。