我遇到一个问题,在极少数情况下,我的Type=simple
systemd 服务会挂起或陷入循环。这会导致其计时器停止调度服务,因为正如通过 确认的那样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 秒,它将被终止,并且服务将显示为失败。