通过包装器运行可执行文件的 Systemd 服务无法通知看门狗

通过包装器运行可执行文件的 Systemd 服务无法通知看门狗

我正在使用一个 systemd 服务文件,该文件将二进制可执行文件作为“通知”类型服务运行。可执行文件使用 C 语言 APIsd_notify函数向 systemd 看门狗发送“ping”。然而,现在我需要用 bash 脚本包装可执行文件。

我遇到的问题是看门狗 ping 被拒绝,因为 systemd 只从属于包装器脚本的“主 pid”接受它们,而不是从包装的二进制文件。有什么办法让 systemd 知道应该接受这些 ping 吗?

答案1

让您的包装器编写exec主二进制文件的脚本,而不是将其作为子文件启动。该脚本将被主可执行文件替换,并保留相同的 PID。

(如果脚本需要做某事二进制文件退出——应该进入 systemdExecStartPost=ExecStopPost=代替。)

还有一些替代方案,包括NotifyAccess=允许通知套接字访问 cgroup 内的所有进程,但它们主要解决“主 PID”不跟踪正确进程的实际问题。

相关内容