我想设置一个计时器来停止服务,执行脚本并重新启动服务。
一种可能性是使用
Type=oneshot
ExecStartPre=/bin/systemctl stop myservice
ExecStart=/usr/local/bin/myscript.sh
ExecStartPost=/bin/systemctl start myservice
另一种是myscript.sh
处理整个事情,包括systemctl
。
systemctl
不过,当可能有 systemd 内置机制与服务交互时,我发现在服务声明中使用它很尴尬。有没有更干净的方法来执行这些操作?
答案1
通过(ab?)使用 WatchdogSec,服务将在未能在规定时间内确认时终止。然后它将重新启动,但首先执行脚本。
WatchdogSec={interval}
Restart=on-watchdog
ExecStopPost=/script.sh
参考:看门狗安全
如果服务能够在运行时进行备份,那将是一个更好的服务。