如何将 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
这样的模块让它更舒服,处理额外的参数等等。
我是 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
这样的模块让它更舒服,处理额外的参数等等。