![为什么 Ejabberd 启动失败?](https://linux22.com/image/825846/%E4%B8%BA%E4%BB%80%E4%B9%88%20Ejabberd%20%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5%EF%BC%9F.png)
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” beam
、beam.smp
、epmd
和ejabberd
进程。我已关闭所有防火墙限制。
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
目前。