システム化されたサービスユニットがあります。
[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サービスを再起動する必要があります。このような場合、コントロールグループの障害を監視してサービスを再起動する方法はありますか?
答え1
統制グループは職業ではない。
「コントロールグループの失敗」などはありません。制御グループは、単にリソースの制約に使用されるコレクションです。彼らは「失敗」しません。
ここでの失敗は、サービスを正しく設計できなかったことです。複数のデーモンを監視し、サービス管理者がデーモンのシャットダウン時に個別に再起動するようにするには、複数のサービスを定義する必要があります。
追加読書
- ジョナサンデボインポラード(2016)。Linux制御グループが機能しない。よく与えられる答えです。
- ジョナサンデボインポラード(2016)。 」2つのサービスがある場合は、両方のサービスを定義します。」。
systemd
恐怖の家。よく与えられる答えです。
答え2
からhelp wait
:
-nオプションが指定されている場合は、次のジョブが終了するのを待って終了ステータスを返します。
wait -n
したがって、スクリプトでこれを使用して、タスクが完了した時期を知ることができるはずです。