web-dev-qa-db-ja.com

コントロールグループ内のプロセスの1つに障害が発生した場合、Systemdはサービスを再起動します

私はsystemdサービスユニットを持っています:

[Unit]
After=network.target

[Service]
User=<user>
Type=forking
ExecStart=/opt/app/start.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

/opt/app/start.shはいくつかのプロセスを開始し、それらをフォークします。

for i in 1 2 3 4 5; do
    bash another_script.sh &
done

bash another_script.shプロセスの1つがゼロ以外のステータスで終了するまで、すべてが正常に機能します。この状況でsystemdサービスが再起動することを期待しています。コントロールグループの障害を監視し、これが発生した場合にサービスを再開する方法はありますか?

3
Rahul

コントロールグループは仕事ではありません。

「コントロールグループの障害」などはありません。コントロールグループは、リソース制限に使用される単なるコレクションです。それらは「失敗」しません。

ここにあるのは、サービスを適切に設計できないことです。監視するデーモンプロセスが複数あり、サービスマネージャーがそれらを終了した場合に個別に再起動する場合は、複数のサービスを定義する必要があります。

参考文献

1
JdeBP

help waitから:

-nオプションが指定されている場合、次のジョブが終了するのを待ち、その終了ステータスを返します。

したがって、スクリプトでwait -nを使用して、ジョブがいつ終了したかを知ることができるはずです。

0
l0b0