我正在使用一个 systemd 服务文件,该文件将二进制可执行文件作为“通知”类型服务运行。可执行文件使用 C 语言 APIsd_notify
函数向 systemd 看门狗发送“ping”。然而,现在我需要用 bash 脚本包装可执行文件。
我遇到的问题是看门狗 ping 被拒绝,因为 systemd 只从属于包装器脚本的“主 pid”接受它们,而不是从包装的二进制文件。有什么办法让 systemd 知道应该接受这些 ping 吗?
答案1
让您的包装器编写exec
主二进制文件的脚本,而不是将其作为子文件启动。该脚本将被主可执行文件替换,并保留相同的 PID。
(如果脚本需要做某事后二进制文件退出——应该进入 systemdExecStartPost=
或ExecStopPost=
代替。)
还有一些替代方案,包括NotifyAccess=
允许通知套接字访问 cgroup 内的所有进程,但它们主要解决“主 PID”不跟踪正确进程的实际问题。