从 systemd 服务记录 coredump 文件?

从 systemd 服务记录 coredump 文件?

我在 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 是否仅适用于在原始根上下文中运行的进程,而一旦将自身转移到另一个用户,则不适用。

相关内容