ejabberd 的 apparmour 配置文件已损坏。启动 ejabberd 时:sudo systemctrl (re)start ejabberd 进程挂起,原因是 erlang 无法与 systemd 通信,其通知钩子失败,如下所示:
2022-06-01 09:12:46.211457+03:00 [错误] <0.356.0>@ejabberd_systemd:handle_info/2:135 无法 ping 看门狗:{badmatch,{error,eacces}}
很可能是路径问题或正确问题。有趣的是,在其他服务器上使用完全相同的配置却可以工作....有人吗?
答案1
从 20.04 开始的这个 systemd Unit 文件解决了这个问题:
Description=A distributed, fault-tolerant Jabber/XMPP server
Documentation=https://www.process-one.net/en/ejabberd/docs/
After=epmd.service network.target
Requires=epmd.service
[Service]
Type=forking
User=ejabberd
Group=ejabberd
LimitNOFILE=65536
Restart=on-failure
RestartSec=5
ExecStart=/bin/sh -c '/usr/sbin/ejabberdctl start && /usr/sbin/ejabberdctl started'
ExecStop=/bin/sh -c '/usr/sbin/ejabberdctl stop && /usr/sbin/ejabberdctl stopped'
ExecReload=/bin/sh -c '/usr/sbin/ejabberdctl reload_config'
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
TimeoutSec=300
[Install]
WantedBy=multi-user.targe
放置于此处:/lib/systemd/system/ejabberd.service
答案2
像魔法一样工作,watchgog 错误不再出现,启动服务不再挂起与原始 ejabberd.service 相比有何不同:-WatchdogSec=30(不再存在)-NotifyAccess=all(不再存在)-PrivateDevices=true(不再存在)-AmbientCapabilities=CAP_NET_BIND_SERVICE(不再存在)
- ExecStart=/bin/sh -c '/usr/sbin/ejabberdctl foreground' (替换为)
- ExecStart=/bin/sh -c'/usr/sbin/ejabberdctl 启动 && /usr/sbin/ejabberdctl 已启动'