我在 Ubuntu 20.04.4 上运行 mosquitto 代理(来自 dev ppa 的 2.0.14)。我定期看到如下消息:
Apr 18 07:44:19 mittServer systemd[1]: mosquitto.service: Main process exited, code=dumped, status=11/SEGV
Apr 18 07:44:19 mittServer systemd[1]: mosquitto.service: Failed with result 'core-dump'.
我还没有找到关于如何将 coredump 文件保存到 Ubuntu/systemd 某个位置的明确方法。但有很多重叠的东西。
我确实确定我可能需要添加
LimitCORE=infinity
到[Service]
/lib/systemd/system/mosquitto.service
然后当然要重启服务。我就是这么做的。
/var/crash/
但是我在或都找不到 coredump /var/lib/apport/coredump
。我按照这个主题上的一些老问题检查了一下,确保它apport
正在运行。它似乎是:
# systemctl status apport
● apport.service - LSB: automatic crash report generation
Loaded: loaded (/etc/init.d/apport; generated)
Active: active (exited) since Thu 2022-04-14 02:29:44 UTC; 4 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 4475)
Memory: 0B
CGroup: /system.slice/apport.service
所以我猜测要么是 a) 我在错误的地方寻找我的核心文件,要么是 b) 某个地方缺少我需要启用/使用的部分。
答案1
我发现这还不够
LimitCORE=infinity
到[Service]
部分/lib/systemd/system/mosquitto.service
。我需要添加以下两项:
LimitCORE=infinity
User=mosquitto
到文件。 mosquitto 代理在启动后不久就将其 uid 降级,出于某种原因,这意味着 coredump 未被写入。 我不知道 LimitCore 的 ulimit 是否仅适用于在原始根上下文中运行的进程,而一旦将自身转移到另一个用户,则不适用。