如何设置一个systemd服务,在30秒的周期内重试5次

72

我希望systemd可以启动一个脚本,并重试最多5次,每隔30秒一次。 阅读systemd.service手册和搜索互联网都没有明显的答案。


2
如果您使用immortal,可以这样做:immortal -w 30 -r 5 <your command> - nbari
1
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。 - jww
1
https://serverfault.com/questions/736624/systemd-service-automatic-restart-after-startlimitinterval/962338 - Channa
1个回答

107

如果要允许最多5次重试,每次间隔30秒,请在相关systemd服务文件中使用以下选项。

[Unit]
StartLimitInterval=200
StartLimitBurst=5

[Service]
Restart=always
RestartSec=30

这适用于运行使用 Type=idle 的脚本的服务。请注意,StartLimitInterval 必须大于 RestartSec * StartLimitBurst ,否则该服务将无限重启。当在 StartLimitInterval 内重新启动 StartLimitBurst 次时,该服务被视为 failed

参见https://www.freedesktop.org/software/systemd/man/systemd.unit.html#StartLimitIntervalSec=intervalhttps://www.freedesktop.org/software/systemd/man/systemd.service.html#RestartSec=


8
可能值得注意的是,根据官方systemd手册,RestartSec和Restart属于[System]部分,而StartLimitInterval和StartLimitBurst属于[Unit]部分。 - Gerhard Hagerer
12
StartLimitInterval是做什么的? - sid-kap
12
当你说“System”时,我想你的意思是“Service”。这对我很有用。 - Haakon
4
对我来说,“Type = forking”也起作用,如果这有什么意义的话。 - fei0x
4
好的,我会尽力以最简洁明了的方式进行翻译,并保持原文意思不变。以下是需要翻译的内容:also, more details here: https://www.freedesktop.org/software/systemd/man/systemd.unit.html# and here: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Examples也可以在这里查看更详细的信息: https://www.freedesktop.org/software/systemd/man/systemd.unit.html# https://www.freedesktop.org/software/systemd/man/systemd.service.html#Examples - fei0x
1
请注意,这仅适用于systemd < 230。有关更新版本的systemd,请参阅此答案https://unix.stackexchange.com/questions/463917/systemds-startlimitintervalsec-and-startlimitburst-never-work/464098#464098 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接