为 systemd 中的经典初始化脚本设置 RemainAfterExit=no

为 systemd 中的经典初始化脚本设置 RemainAfterExit=no

我在 Debian Jessie 上使用经典的 init 脚本运行自定义服务。Debian Jessie 使用 systemd。我使用 init 脚本的原因是,我在 Debian Wheezy 上也使用相同的服务,而 Debian Wheezy 上没有 systemd。

由于该服务偶尔会崩溃,我希望它在停止时重新启动。我的理解是 systemd 会处理这个问题。但是,当我手动终止服务(不使用systemctl stop service)时,systemctl status会将该服务报告为active (exited)

据我理解,这意味着 systemd 只是将该服务视为无需进程即可“运行”的服务。文档中提到了RemainAfterExit配置此行为的方法,但这是一个在单元文件中使用的标志,我只有一个初始化脚本。

有没有办法让 systemd 知道 init 服务需要一个进程才能被视为活动状态?换句话说,让它知道这active (exited)是一种不受欢迎的状态?

答案1

我通过编写通用样板 systemd 单元文件解决了该问题。将文件存储在 中/etc/systemd/system/$SERVICE.service

替换$SERVICE为服务名称。

[Unit]
Description=$SERVICE init script wrapper
After=network.target

[Service]
ExecStart=/etc/init.d/$SERVICE start
ExecStop=/etc/init.d/$SERVICE stop
ExecReload=/etc/init.d/$SERVICE reload
PIDFile=/var/run/$SERVICE.pid
RemainAfterExit=no
Restart=always
Type=forking

[Install]
WantedBy=multiuser.target

运行systemctl daemon-reload以刷新 systemd 的内部结构。

相关内容