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