如何在执行 ExecStart 条目之前停止服务?

如何在执行 ExecStart 条目之前停止服务?

我想设置一个计时器来停止服务,执行脚本并重新启动服务。

一种可能性是使用

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

参考:看门狗安全

如果服务能够在运行时进行备份,那将是一个更好的服务。

相关内容