当不再生成输出时重新启动 systemd 服务

当不再生成输出时重新启动 systemd 服务

当在预定义的时间内没有生成输出时,是否可以重新启动 systemd 服务?

我有一个显然可以挂起的脚本,但 systemd (或 Python 对于这种情况)未检测到该脚本,因此它不会进入失败状态。

但是,它确实停止记录输出,因此我应该能够在一分钟没有输出后重新启动服务。这可以用 systemd 实现吗?

我当前的系统文件:

[Unit]
Description=SOmething
After=network.target

[Service]
WorkingDirectory=/home/user/system/something
User=nobody
ExecStart=/usr/bin/python2 something.py
Restart=on-watchdog
RestartSec=10s

[Install]
WantedBy=multi-user.target

答案1

我不认为 systemd 允许你这样做,至少systemd.service(5)手册页似乎没有提及类似的内容。

但是,您可以做的是使用 systemd 的内置看门狗。

您可以通过设置WatchdogSec=并定期发送您的服务WATCHDOG=1来做到这一点sd_notify。如果您进行了设置WatchdogSec=30,那么您的服务必须至少每 30 秒通知 systemd。

当你的服务挂起时,它不会再通知 systemd,systemd 将因此终止你的服务。

使用restart=on-watchdog(您已经拥有,但没有它不会执行任何操作WatchdogSec=),那么 systemd 将在您的服务被看门狗杀死后重新启动您的服务。

相关内容