在sysd下实现docker服务的看门狗
我目前正在一个docker项目上工作,我需要实现看门狗。 当Docker容器最终作为Docker守护进程的subprocess运行时,它们与服务的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
来实现。 我完全是新手。 任何帮助将不胜感激。
用法是:
sdnotify-proxy /path/to/unix-sock cmd ...
unix-sock用于将进程中的sd_notify命令代理到systemd。 为了和Docker一起使用,我们假设你的Docker镜像被称为mylittled。 你的服务文件将包含:
[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:当我们的映像中包含这个实用程序(运行flannel)时,它被放置在/ usr / libexec中,不会将其公开。 它可能在将来从图像中删除。