题 达到启动限制后的系统执行命令


我一直在研究一个systemd服务来包装一个管理脚本,我正试图优雅地处理它完全破坏。

现在我有 Restart 调成 always 因此当事情失败时它会再次尝试,但是一些失败状态需要注意(缺少配置文件,错误的SQL等),因此我不希望它在后台以不可纠正的状态连续旋转。

我发现 StartLimitIntervalStartLimitBurst,和 StartLimitAction,在Y秒内X失败后停止尝试重新启动它,但事实证明只有可用的动作 StartLimitAction 正在重新启动或关闭机器,这有点矫枉过正。

我一直在看 OnFailure 和 写了一个迷你服务来发送警报电子邮件 当它被触发时,但OnFailure会在每次服务终止时触发,而不是在它达到起始限制时触发,因此我们收到一堆电子邮件而不是一封。

接下来要尝试什么的想法?


6
2018-06-27 21:17






答案:


Startlimitaction 可能是你想要的。手册页说

...采取none,reboot,reboot-force,reboot-immediate,poweroff,poweroff-force或poweroff-immediate之一。 如果没有设置,除了不允许启动之外,达到速率限制将不会触发任何操作

似乎将startlimit action设置为none可能会执行您想要的操作。


2
2018-06-27 21:45



这不是我想要的。什么是理想的能力 StartLimitAction 执行任意命令而不是忽略或重新启动。 OnFailure 每次失败时触发我的警报脚本,我真的只希望在服务达到启动限制时触发警报,并且不会重新启动。我不确定如果没有用计数器制作某种奇怪的包装器,我是不可能的。 - Will