如何自动重启因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会在它下面,但请有人验证我的想法。
当一个进程终止时,它终止的性质将被它的父进程记录。对于由systemd启动的服务,父服务是systemd。
可以报告的可用替代方案是由于信号(以及哪个)或正常终止(以及伴随的退出状态)而终止。由"正常";我指的是被信号杀死的补码,不一定是干净的补码;或"successful".
用于进程管理的系统接口不提供任何其他选项,但是systemd本身也提供了对其管理的服务应用超时或使用看门狗计时器的功能,这可能导致服务因其中一个服务过期而终止(正如systemd所描述的那样)。
关于各种Restart
设置行为的系统文档提供了很好的详细信息,说明哪些终止情况导致使用哪些Restart
设置重新启动。由于SIGKILL
而终止是问题中所呈现的信息,这将属于"不洁信号"。类别,如systemd所定义的那样。因此,按照文档,将服务的Restart
属性配置为always
,on-failure
,on-abnormal
或on-abort
中的任何一个都将导致systemd在由于SIGKILL
而终止时自动重新启动该服务。
这些选项中的大多数在其他情况下也会产生自动重启,但是on-abort
只会在由于不干净的信号而终止的情况下产生自动重启。(注意,虽然systemd认为SIGKILL
不干净,但它认为SIGTERM
是干净的。)