当在预定义的时间内没有生成输出时,是否可以重新启动 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 将在您的服务被看门狗杀死后重新启动您的服务。