为什么 Ejabberd 启动失败?

为什么 Ejabberd 启动失败?

ejabberd 2.1.10-2我正在尝试在我的服务器上安装Ubuntu 12.04.1。这是一次全新安装,ejabberd 从未成功安装。

安装

每次,apt-get 都会挂在此:

Setting up ejabberd (2.1.10-2ubuntu1) ...
Generating SSL certificate /etc/ejabberd/ejabberd.pem...

Creating config file /etc/ejabberd/ejabberd.cfg with new version
Starting jabber server: ejabberd............................................................ failed.

这些点会一直出现,直到超时或我“killall” beambeam.smpepmdejabberd进程。我已关闭所有防火墙限制。

epmd -names这是安装挂起时的输出:

epmd: up and running on port 4369 with data:
name ejabberdctl at port 42108
name ejabberd at port 39621

失败后:

epmd: up and running on port 4369 with data:
name ejabberd at port 39621

同时(期间和之后),netstat -atnp | grep 5222和的输出都netstat -atnp | grep 5280为空。


崩溃文件

在 处创建了一个崩溃转储文件/var/log/ejabber/erl_crash.dump。标语(即崩溃原因)是:

Slogan: Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})

它还活着?

每当我尝试用重新启动 ejabberd 时service ejabberd start,都会发生同样的事情 - 即使我在执行此操作之前已经终止了所有进程。

但是,当我再次杀死上面列出的所有进程并运行时su - ejabberd -c /usr/sbin/ejabberd,我得到的输出如下:

Erlang R14B04 (erts-5.8.5) [source] [64-bit] [rq:1] [async-threads:0] [kernel-poll:false]

Eshell V5.8.5  (abort with ^G)
(ejabberd@ns1)1> 
=INFO REPORT==== 15-Oct-2012::12:26:13 ===
I(<0.478.0>:ejabberd_listener:166) : Reusing listening port for 5222

=INFO REPORT==== 15-Oct-2012::12:26:13 ===
I(<0.479.0>:ejabberd_listener:166) : Reusing listening port for 5269

=INFO REPORT==== 15-Oct-2012::12:26:13 ===
I(<0.480.0>:ejabberd_listener:166) : Reusing listening port for 5280

=INFO REPORT==== 15-Oct-2012::12:26:13 ===
I(<0.40.0>:ejabberd_app:72) : ejabberd 2.1.10 is started in the node ejabberd@ns1

然后,服务器似乎正在运行。当我访问时,我收到登录提示http://mydomain.com:5280/admin/。当然,除非我创建一个帐户,否则我无法登录。

此时netstat -atnp | grep 5222和的输出netstat -atnp | grep 5280如下:

tcp        0      0 0.0.0.0:5222            0.0.0.0:*               LISTEN      19347/beam      
tcp        0      0 0.0.0.0:5280            0.0.0.0:*               LISTEN      19347/beam      

韋伯德克特

即使 ejabberd 似乎正在运行,尝试使用 ejabberdctl 执行任何操作都会失败。例如:尝试注册用户:

root@ns1:~# ejabberdctl register myusername mydomain.com mypassword
Failed RPC connection to the node ejabberd@ns1: nodedown

我不知道我做错了什么。这种情况发生在我安装了相同软件的两台不同服务器上(实际上没什么问题)。请帮忙。谢谢。

答案1

有一次我遇到了这个问题,守护进程无法确定我在 ejabber 配置文件中提供的主机名的 IP 地址。我的解决方案是编辑 /etc/hosts 文件,并确保有一个主机名条目,用于我的公共 IP 地址和我希望 ejabber 响应的域。

0.0.0.0 hostname.domain.com hostname
1.1.1.1 ns1.yahoo.com ns1

好了,你明白了。希望这能有所帮助。

答案2

这是 apparmor 的问题,无法从 ejabberd 套接字 (notify systemd 的 erlang 子进程) -> systemd WATCHDOG 进行访问。最简单的方法是使用以下命令禁用 apparmor 配置文件:

ln -s /etc/apparmor.d/usr.sbin.ejabberdctl /etc/apparmor.d/disable/ apparmor_parser -R /etc/apparmor.d/usr.sbin.ejabberdctl

目前。

相关内容