systemd 重启阈值限制

systemd 重启阈值限制

有关的: 限制系统重启突发

我正在为运行相机服务的商业产品工作。该服务对于系统的正常功能至关重要。到目前为止,一切进展顺利,如果由于低级协议/驱动程序问题而失败,我可以重新启动服务。以下是 .service 单元文件中的一个片段,用于处理服务重新启动和重新引导逻辑。

...
[service]
Restart=on-failure
StartLimitInterval=2min
StartLimitBurst=5
StartLimitAction=reboot-force
...

在某些情况下(例如:总线故障),很可能多次重新启动都无助于恢复系统。在这种情况下,我们希望停止重新启动设备(因为这可能会让用户感到厌烦)并停止所有恢复相机管道的尝试。这可以使用监控服务来实现,该服务仅跟踪设备在停止进一步重新启动之前经历的重新启动次数。

我认为另一个选择是依赖于 systemd,而不是单独为此目的添加另一个监控服务(而这又将由 systemd 监控)。我花了一些时间寻找 systemd 选项,通读文档/示例以查看是否存在此类重新启动阈值。我正在寻找一种方法将重新启动次数限制为某些可配置的 StartLimitReboot

太长了;博士

我想实现这样的目标

...
[service]
... 
...
... 
StartLimitReboot=3 # stop rebooting after this limit
...

看起来 systemd 目前还不支持这样的语义,但如果它支持,那将大大简化我的任务。

答案1

不,systemd不提供管理多次重新启动然后停止重新启动的功能。

考虑这样一种情况,您的应用程序失败两次并触发两次重新启动StartActionLimit并保持稳定两周,然后在很久以后以这种方式触发第三次重新启动。您期望StartLimitReboot=3在这种情况下触发理论吗?

如果不是,则必须有一些超时值来使“重新启动计数器”过期。这与衡量服务重新启动速度的计时器不同,因为重新启动计时器必须考虑计算机在尝试再次启动服务之前启动所需的时间。

此外,如果系统由于关键服务故障而陷入启动循环,那么保留机器是否有意义?如果关键服务不起作用,或者应该在此之后放弃并关闭电源?

虽然我可以看到人们对在这里寻求帮助的兴趣systemd,但我不希望这个功能很快出现。

相关内容