使用 systemd 看门狗支持来重新启动应用程序

使用 systemd 看门狗支持来重新启动应用程序

我有一个简单的systemd服务单元,可以在服务定义中python定义的无条件退出时重新启动我的脚本。Restart=always我只是想绝对确保即使脚本以某种方式挂起,我也可以通过启用WatchdogSec=单元文件中的变量来重新启动它。

我的问题是systemd 日志的官方文档没有解释清楚。

引用同一页面,

WatchdogSec=

配置服务的看门狗超时。启动完成后,看门狗被激活。该服务必须sd_notify(3)定期调用"WATCHDOG=1"(即“keep-alive ping”)。

不清楚的部分是,服务它本身负责维护看门狗服务的 ping(或者)它正在运行的应用程序(在我的例子中 - Python 脚本)需要通过更新提到的环境变量来维护 ping。

我的简单服务定义

[Unit]
Description=dev-Status: Computes RF device availability status
           
[Service]
Type=simple

EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
RestartSec=10
Restart=always
         
[Install]
WantedBy=default.target

因此,如果我仅添加以下行到此服务文件中,它会自动重新启动我的脚本吗?

WatchdogSec=30s

答案1

要“拍”或 ping 看门狗,您可以使用 python系统发送通知的包:

from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)

相关内容