Ubuntu 在Xenial上调用rc.d';守护进程被杀死时无法工作

Ubuntu 在Xenial上调用rc.d';守护进程被杀死时无法工作,ubuntu,init,systemd,Ubuntu,Init,Systemd,我使用/etc/init.d脚本来启动守护进程。在喘息和信任状态下,即使守护进程由于异常原因(死亡、seg故障等)停止运行,我也可以使用invoke rc.d daemon start(或service daemon start)重新启动。另外,invoke rc.d daemon status将返回一个非零值(我在一个脚本中使用该值,该脚本将每10秒检查一次daemon的状态,如果它没有运行,则重新启动) 转到Xenial和systemd,如果守护进程被终止,那么invoke rc.d dae

我使用/etc/init.d脚本来启动守护进程。在喘息和信任状态下,即使守护进程由于异常原因(死亡、seg故障等)停止运行,我也可以使用invoke rc.d daemon start(或service daemon start)重新启动。另外,invoke rc.d daemon status将返回一个非零值(我在一个脚本中使用该值,该脚本将每10秒检查一次daemon的状态,如果它没有运行,则重新启动)

转到Xenial和systemd,如果守护进程被终止,那么invoke rc.d daemon start不工作,invoke rc.d daemon status表示守护进程仍在运行(以0退出)

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

在systemd中,您可以使用SuccessExitStatus=exit_代码来说明这种情况,但当systemd使用来自Trusty的init脚本时则不能


关于如何修改init文件的任何想法都可以覆盖Xenial上的情况(我不想创建一个systemd文件来避免维护这两个版本)。

我听说您不想创建systemd
.service
文件,但这可能比您尝试使用systemd管理遗留SysV init脚本要快。正如您很快发现的那样,额外的间接层增加了复杂性并增加了bug的可能性

如果没有看到您试图开始工作的
init.d
脚本,就无法立即确定问题可能是什么

至于维护附加版本的时间——文件实际上根本不需要更改,除非服务的一些非常基本的内容随着时间的推移而更改,因此附加维护时间应该接近于零

设置
.service
文件时要签出的关键文档有
man-systemd.service
man-systemd.unit
以及可能的
man-systemd.exec
。但最简单的解决方案可能只是从类似的服务复制/粘贴/修改
.service
文件