为什么看门狗不踢?

2024-10-04 01:36:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在coreos上配置一个看门狗。 服务是这样的。在

[Unit]
Description=Watchdog example service

[Service]
Type=notify
Environment=NOTIFY_SOCKET=/run/%p.sock
Environment=WATCHDOG_USEC=1000000
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStart=/usr/libexec/sdnotify-proxy /run/%p.sock /usr/bin/docker run \
    --env=NOTIFY_SOCKET=/run/%p.sock \
    -v /run:/run \
    --name %p pranav93/test_watchdogged python hello.py
ExecStop=/usr/bin/docker stop %p

WatchdogSec=1

[Install]
WantedBy=multi-user.target

python文件hello.py类似于

^{pr2}$

虽然我没有发送WATCHDOG=1ping到sysd,但它仍然没有停止,而且服务也没有将其移动到“失败”状态。背后的原因是什么? 日志是

Oct 06 09:33:19 core-01 systemd[1]: Starting Watchdog example service...
Oct 06 09:33:19 core-01 docker[2779]: watchdogged
Oct 06 09:33:19 core-01 docker[2790]: watchdogged
Oct 06 09:33:19 core-01 sdnotify-proxy[2800]: True
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: ready sending
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: <socket._socketobject object at 0x7fa3cc3c2440>
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 1
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: watchdog sending
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: <socket._socketobject object at 0x7fa3cc3c2440>
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 1
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: None
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: lol, wait now for someyime
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 0
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 1
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 2
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: finished
Oct 06 09:33:22 core-01 docker[2851]: watchdogged
Oct 06 09:33:22 core-01 systemd[1]: Started Watchdog example service.

Tags: dockerruncorebinenvironmentexampleusrservice
1条回答
网友
1楼 · 发布于 2024-10-04 01:36:46

我注意到了一些事情。首先,在程序退出之后,Started Watchdog example service.行晚了3秒,这表示没有收到{}。看门狗监控只有在机组“启动”后才开始。在

另外,尝试使用print >>os.stderr进行日志记录,因为stdout的输出是缓冲的,很难看到计时。在

你不应该的

Environment=NOTIFY_SOCKET=/run/%p.sock
Environment=WATCHDOG_USEC=1000000

因为这些都是由systemd设置的。您应该通过 env和{}传递代理套接字,否则它将“丢失”:

^{pr2}$

相关问题 更多 >