在 systemd 中為經典初始化腳本設定 RemainAfterExit=no

在 systemd 中為經典初始化腳本設定 RemainAfterExit=no

我在 Debian Jessie 上使用經典的初始化腳本運行自訂服務。 Debian Jessie 使用 systemd。我使用 init 腳本的原因是我也在沒有 systemd 的 Debian Wheezy 上使用相同的服務。

由於該服務偶爾可能會崩潰,因此我希望它在停止時重新啟動。我的理解是 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 的內部結構。

相關內容