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

Bob*_*ver 7 systemd timeout output

当在预定义的时间内没有生成输出时,是否可以重新启动 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
Run Code Online (Sandbox Code Playgroud)

Mat*_*don 2

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

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

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

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

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