web-dev-qa-db-ja.com

systemdが起動した直後にサービスを停止するのはなぜですか?

起動時または再起動時にシェルスクリプトを呼び出すsystemdサービスを作成しました。

[Unit]
Description=Starts the DCCA index software

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/opt/insiteone/bin/indexControl start
ExecStop=/opt/insiteone/bin/indexControl stop

# Execute pre and post scripts as root
#PermissionsStartOnly=true
Restart=on-abort
TimeoutSec=600

最初は、それが開始されるとすぐに無限ループで再起動し続けましたが、TimeoutSecオプションを追加すると、サービスが初めて開始された直後に(開始されたときに)ExecStopが呼び出されました、その後すぐに再び停止します)。

手がかり、どこが間違っているのですか? PS:indexControlは、他のプロセスを開始するシェルスクリプトです。

13
kingsmasher1

Restart=on-abortRestart=on-abnormalに変更してみてください

から http://www.freedesktop.org/software/systemd/man/systemd.service.html

エラーからの自動回復を試みることで信頼性を高めるために、これをon-failureに設定することは、長時間実行サービスの推奨される選択です。独自の選択で終了できるサービス(および即時の再起動を回避するサービス)の場合、代替オプションは代替オプションです。

また、Type=oneshot[Service]セクションに追加することもできます。

https://wiki.archlinux.org/index.php/Systemd#Service_types から:

Type = oneshot:これは、単一のジョブを実行して終了するスクリプトに役立ちます。 RemainAfterExit = yesも設定して、プロセスの終了後もsystemdがサービスをアクティブと見なすようにすることができます。

以下の推奨される変更を貼り付けることができます。

[Unit]
Description=Starts the DCCA index software

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
ExecStart=/opt/insiteone/bin/indexControl start
ExecStop=/opt/insiteone/bin/indexControl stop
Restart=on-abnormal

他に考慮すべきことは、Restart=行が必要かどうかです...このサービスファイルが呼び出すスクリプトは頻繁に失敗しますか?

5
Jay Baker