私は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サービスが再起動することを期待しています。コントロールグループの障害を監視し、これが発生した場合にサービスを再開する方法はありますか?
「コントロールグループの障害」などはありません。コントロールグループは、リソース制限に使用される単なるコレクションです。それらは「失敗」しません。
ここにあるのは、サービスを適切に設計できないことです。監視するデーモンプロセスが複数あり、サービスマネージャーがそれらを終了した場合に個別に再起動する場合は、複数のサービスを定義する必要があります。
systemd
House of Horror。頻繁に与えられる答え。help wait
から:
-nオプションが指定されている場合、次のジョブが終了するのを待ち、その終了ステータスを返します。
したがって、スクリプトでwait -n
を使用して、ジョブがいつ終了したかを知ることができるはずです。