当守护程序被终止时,Xenial上的invoke-rc.d不起作用

时间:2017-06-08 14:03:18

标签: ubuntu init systemd

我使用/etc/init.d脚本启动守护进程。在Wheezy和Trusty上,即使守护进程因异常原因(kill,seg fault等)停止运行,我也可以使用invoke-rc.d守护进程启动(或服务守护进程启动)再次启动。此外,invoke-rc.d守护程序状态将返回非零值(我在脚本中使用它来检查守护程序的状态每10秒,如果它没有运行则重新启动)。

继续使用Xenial和systemd,如果守护程序被终止,则invoke-rc.d守护程序启动不起作用,并且invoke-rc.d守护程序状态表示该守护程序仍在运行(以0退出)。 / p>

我知道systemd可以处理init文件,但看起来这个角落的情况没有得到妥善处理。

在systemd中,您可以使用SuccessExitStatus = exit_code来覆盖这种情况,但是当systemd使用来自Trusty的init脚本时则不行。

我对如何修改我的init文件的想法涵盖了Xenial上的那种情况(我不想创建一个systemd文件以避免维护这两个版本)。

1 个答案:

答案 0 :(得分:0)

我听说您不想创建systemd .service文件,但它可能比您尝试做的更快,那就是让systemd管理遗留的SysV init脚本。正如您很快发现的那样,额外的间接层会增加复杂性并增加漏洞的可能性。

如果没有看到您尝试使用的init.d脚本,则无法立即清楚问题是什么。

至于维护其他版本的时间 - 文件根本不需要真正改变,除非服务真正非常基础的东西随着时间的推移而变化,因此额外的维护时间应该接近于零。

要检查设置.service文件的主要文档是man systemd.serviceman systemd.unit,可能还有man systemd.exec。但最简单的解决方案可能只是从类似的服务中复制/粘贴/修改.service文件。