linux 如何自动重新启动因OOM而终止的systemd服务

ehxuflar  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(334)

如何自动重新启动由于OOM而终止的systemd服务。
我已经添加了一个重新启动,但我不确定这是否会在OOM上工作,我不能在我的本地开发盒上重现OOM,所以知道这会很有帮助。

[Service]
Restart=on-failure
RestartSec=1s

错误:

Main process exited, code=killed, status=9/KILL

阅读文档https://www.freedesktop.org/software/systemd/man/systemd.service.html看起来像是在不干净的退出代码上重新启动,我认为状态9会出现在它下面,但请有人验证我的想法。

vi4fp9gy

vi4fp9gy1#

当进程终止时,其终止的性质可用于记录的父进程。对于由systemd启动的服务,父进程是systemd。
可以报告的可选方法是由于信号而终止(以及哪个信号)或正常终止(以及伴随的退出状态)。“正常”我指的是“被信号终止”的补语,* 不 * 一定是“干净”或“成功”。
用于进程管理的系统接口不提供任何其他选项,但systemd本身也提供了将超时应用于或将监视计时器用于其管理的服务,这可能会导致服务因其中一个服务到期而终止(作为systemd帐户)。
systemd文档提供了各种Restart设置行为的详细信息,说明了哪些终止情况导致使用哪些Restart设置重新启动。问题中显示的消息是由于SIGKILL而终止,这属于systemd定义的“不干净信号”类别。因此,按照文档,将服务的Restart属性配置为alwayson-failureon-abnormalon-abort中的任意一个,将导致systemd在该服务因SIGKILL而终止时自动重新启动该服务。
这些选项中的大多数在其他情况下也会产生自动重启,但是on-abort * 仅 * 在由于不干净的信号而终止的情况下才会产生自动重启。(注意,尽管systemd认为SIGKILL不干净,但它认为SIGTERM干净。)

相关问题