我正在为一家运行相机服务的商业产品工作.此服务对于系统的正常功能至关重要.到目前为止,它很顺利,如果由于低级协议/驱动程序问题导致服务失败,我可以重新启动服务.这是来自.service单元文件的片段,用于处理服务重启和重启逻辑.
...
[service]
Restart=on-failure
StartLimitInterval=2min
StartLimitBurst=5
StartLimitAction=reboot-force
...
在某些条件下(例如:公交铁路故障),任何数量的重启都很可能无法帮助恢复系统.在这种情况下,我们希望停止重启设备(因为它可能会让用户烦恼)并停止所有恢复摄像机管道的尝试.这可以通过监视服务来实现,该服务仅在停止进一步重新启动之前跟踪设备经历的重新启动次数.
另一种选择,我认为是依赖于systemd,而不是仅为此目的添加另一个监视服务(而这又将由systemd监视).我花了一些时间来查找systemd选项,阅读文档/示例以查看是否存在此类重新启动阈值.我正在寻找一种方法来限制重新启动的数量到一些可配置的StartLimitReboot
TL;博士
我希望实现这样的目标
...
[service]
...
...
...
StartLimitReboot=3 # stop rebooting after this limit
...
看起来systemd现在不支持这样的语义,但如果它支持,那将大大简化我的任务.
解决方法:
不,systemd不提供管理多次重启然后停止重启的功能.
考虑这样一种情况:您的应用程序失败两次并通过StartActionLimit触发重新启动两次并保持稳定两周,然后以这种方式触发第三次重启.在这种情况下,您是否期望触发理论上的StartLimitReboot = 3?
如果没有,则必须有一些超时值才能使“重启计数器”到期.这与服务重新启动的计时器不同,因为重启计时器必须考虑机器在尝试再次启动服务之前启动所需的时间.
此外,如果系统由于严重的服务故障而陷入启动循环,如果关键服务无法正常工作,或者在此之后是否应该放弃并关闭电源,是否仍然有意义?
虽然我可以看到有兴趣获得系统帮助,但我不希望这个功能很快出现.