eJabberd 版本:22.05
操作系统:Ubuntu 18.04 LTS
安装:来自源代码
我们有一个 ejabberd 集群,其中三个节点具有下面列出的节点名称。
当我们尝试使用命令从集群中删除节点时
ejabberdctl leave_cluster '[email protected]'
该命令在节点 ltxmpp2.gims 上发出,引发错误。
ejabberd@ltxmpp2:~$ ejabberdctl leave_cluster'[电子邮件保护]'
与节点的 RPC 连接失败 '[电子邮件保护]':{'EXIT',{undef,
[{erl_error,format_exception,[2,error,undef,[{net_adm,ping,['[电子邮件保护]'],
[]}, {ejabberd_cluster_mnesia,
leave,1,
[{file, "src/ejabberd_cluster_mnesia.erl"},
{line,78}]}, {ejabberd_ctl, call_command, 4, [{file, "src/ejabberd_ctl.erl"},
{line, 332}]}, {ejabberd_ctl, try_call_command, 4, [{file, "src/ejabberd_ctl.erl"},
{line, 297}]}, {ejabberd_ctl, process2,4, [{file, "src/ejabberd_ctl.erl"},
{line, 235}]}, {ejabberd_ctl, process,2, [{file, "src/ejabberd_ctl.erl"},
{line, 213}]}, {erpc, execute_call, 4, [{file, "erpc.erl"},
{line, 392}]}], #Fun<misc.6.97582168>, #Fun<misc.7.97582168>], []},
{ejabberd_ctl, try_call_command, 4, [{file, "src/ejabberd_ctl.erl"},
{line,315}]}, {ejabberd_ctl, process2,4, [{file, "src/ejabberd_ctl.erl"},
{line,235}]}, {ejabberd_ctl, process,2, [{file, "src/ejabberd_ctl.erl"},
{line,213}]}, {ejabberd_ctl, process,1, []}]}}\
启动 ejabberd 节点的命令:
start Start in server mode
foreground Start in server mode (attached)
foreground-quiet Start in server mode (attached), show only critical messages
live Start in interactive mode, with Erlang shell
iexlive Start in interactive mode, with Elixir shell
与正在运行的 ejabberd 节点交互的命令:
debug Attach an interactive Erlang shell to a running node
iexdebug Attach an interactive Elixir shell to a running node
etop Attach to a running node and start Erlang Top
ping Send ping to the node, returns pong or pang
started|stopped Wait for the node to fully start|stop
启动ejabberd节点时的可选参数:
--config-dir dir Config ejabberd: /usr/local/etc/ejabberd
--config file Config ejabberd: /usr/local/etc/ejabberd/ejabberd.yml
--ctl-config file Config ejabberdctl: /usr/local/etc/ejabberd/ejabberdctl.cfg
--logs dir Directory for logs: /usr/local/var/log/ejabberd
--spool dir Database spool dir: /usr/local/var/lib/ejabberd
--node nodename ejabberd node name: [email protected]
谁能解释一下错误的原因?
答案1
安装:从源代码
这意味着您从 ubuntu 安装了 erlang 包,并从源代码编译了 ejabberd。
错误,undef,[{net_adm,ping,['[电子邮件保护]'], []},
如果我理解正确的话,那条长错误消息中最相关的部分就是那行。
这句话可能意味着:
- A)无法找到 Erlang 模块 net_adm.beam,
- B) 或者模块不包含一个带有一个参数的名为 ping 的函数。
让我们进一步深入研究您的安装,看看具体的问题是什么。
A.1) ubuntu 中的文件 net_adm.beam 包含在 erlang-base 包中。您安装了该包吗?
安装好了吗?然后:
A.2) 自己检查一下 net_adm:ping 函数是否可以在你的 Erlang 安装中使用:
$ erl
Erlang/OTP 25 [erts-13.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns]
Eshell V13.2 (abort with ^G)
1> net_adm:ping('aaaa').
pang
2> q().
它在简单的 Erlang shell 中可以工作吗?然后:
A.3) 检查你的 ejabberd 安装是否可以使用函数 net_adm:ping:
$ ejabberdctl live
...
(ejabberd2@localhost)1> net_adm:ping('aaaa').
pang
(ejabberd2@localhost)2> q().
ok
B) 该函数很久以前就包含在 Erlang 中了...您安装的是哪个版本的 Erlang?