如何将setcookie添加到ejabberdctl中以运行ejabberd服务或在启动时没有setcookie的情况下在不同的机器上连接两个节点?

时间:2017-10-27 01:39:39

标签: erlang ejabberd

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

ejabberdctl中的代码部分是

ctlexec()
{ 
    CONN_NAME=$1; 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假设首先开始。

1 个答案:

答案 0 :(得分:0)

你的鼻子下有一个解决方案。 ctlexec()如何运作?它运行名为--hidden的{​​{1}}节点,设置选项$NAME ${CONN_NAME},将$KERNEL_OPTS插入搜索路径,并使用$EJABBERD_EBIN_PATH中的一些其他参数调用ejabberd_ctl:start()。因此$ERLANG_NODE $COMMAND中必须有-setcookie Cookie参数,或者$KERNEL_OPTS中使用默认Cookie。这正是你所需要的。只需将$HOME/.erlang.cookie替换为您自己的模块,然后使用您已有的-s ejabberd_ctl$KERNEL_OPTS内容。在脚本中搜索$ERLANG_NODE$KERNEL_OPTS包含的线索。

$ERLANG_NODE这样的脚本是常用的方式。它非常简单而优雅。您只需运行自己的节点设置它ejabberd_ctl,这样就不会打扰群集中的其他节点。不要忘记设置一些随机节点名称。连接到应用程序节点,然后执行--hidden即可。通常有一些模块如rpc:call/4,5使其更舒适,处理额外的参数等等。