如何在 systemd 服务中指定最长服务持续时间?

如何在 systemd 服务中指定最长服务持续时间?

我遇到一个问题,在极少数情况下,我的Type=simplesystemd 服务会挂起或陷入循环。这会导致其计时器停止调度服务,因为正如通过 确认的那样sudo systemctl status myservice,服务在应该早已退出的情况下仍在运行。我还没有弄清楚这个错误,但这并不重要。但与此同时,我不希望它停止安排未来的运行。

有没有办法在 systemd 服务文件中指定最大运行时间,之后它将强制停止?

[Unit]
Description=scripts should run and exit but occasionally hangs or infinite loop      

[Service]
SyslogIdentifier=myservice
Environment='MYVAR=myvar'
User=deanresin
Type=simple
ExecStart=/usr/bin/python3 /home/deanresin/myscript

答案1

TimeoutStartSec应该使用。正如 @muru 在评论中提到的,运行应该退出的脚本的正确方法是使用Type=oneshot而不是Type=simple.

例如,如果您的脚本通常在 10 秒内执行,您的配置将是:

[Service]
Type=oneshot
TimeoutStartSec=10
SyslogIdentifier=myservice
Environment='MYVAR=myvar'
User=deanresin
ExecStart=/usr/bin/python3 /home/deanresin/myscript

如果脚本执行时间超过 10 秒,它将被终止,并且服务将显示为失败。

相关内容