systemd の従来の init スクリプトに RemainAfterExit=no を設定する

systemd の従来の init スクリプトに RemainAfterExit=no を設定する

私は Debian Jessie で従来の init スクリプトを使用してカスタム サービスを実行しています。Debian Jessie は systemd を使用します。init スクリプトを使用する理由は、systemd がない Debian Wheezy でも同じサービスを使用しているためです。

サービスが時々クラッシュすることがあるので、停止したときに再起動するようにします。私の理解では、systemd がこれを処理します。ただし、( を使用せずにsystemctl stop service) 手動でサービスを強制終了すると、systemctl statusはサービスを として報告しますactive (exited)

これは、systemd が、サービスをプロセスなしで「実行」できるサービスと単純に見なすことを意味すると理解しています。ドキュメントでは、RemainAfterExitこの動作を設定する方法としてただし、これはユニット ファイルで使用するフラグであり、init スクリプトしかありません。

active (exited)init サービスがプロセスをアクティブと見なす必要があることを systemd に知らせる方法はありますか? 言い換えると、それが望ましくない状態であることを systemd に知らせる方法はありますか?

答え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-reloadsystemd の内部を更新するために実行します。

関連情報