私は 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-reload
systemd の内部を更新するために実行します。