我目前正在开发一个docker项目,我需要实现看门狗。由于Docker容器最终作为Docker守护程序的子进程运行,因此它们位于与服务不同的cgroup中,sd_notify事件不会被sysd处理。为此,我偶然发现https://github.com/coreos/sdnotify-proxy。 通常添加看门狗我会做,
[Unit]
Description=My Little Daemon
Documentation=man:mylittled(8)
[Service]
ExecStart=/usr/bin/mylittled
WatchdogSec=30s
Restart=on-failure
StartLimitInterval=5min
StartLimitBurst=4
StartLimitAction=reboot-force
但是应该如何使用sdnotify-proxy
来实现。我对此非常新手。非常感谢任何帮助。
答案 0 :(得分:1)
用法是:
sdnotify-proxy /path/to/unix-sock cmd ...
unix-sock用于将进程中的sd_notify命令代理到systemd。要与Docker一起使用,我们假设您的Docker镜像被称为mylteled。您的服务文件将包含:
[Service]
ExecStart=/path/to/sdnotify-proxy /run/mylittled-sd.sock /usr/bin/docker run \
--volume=/run/mylittled-sd.sock:/run/mylittled-sd.sock \
--env=NOTIFY_SOCKET=/run/mylittled-sd.sock \
mylittled
有关示例用法,请参阅https://github.com/coreos/coreos-overlay/blob/master/app-admin/flannel/files/flanneld.service。
如果您正在使用CoreOS:虽然此实用程序当前包含在我们的图像中(用于运行法兰绒),但它放在/ usr / libexec中,不会将其公开以供一般使用。它可能会在将来从图像中删除。