start.sh が終了すると、systemd は start.sh と同じ cgroup 内のすべてを強制終了します
オプションは次のとおりです:
-
Unit セクションで KillMode を設定して処理します (デフォルトは control-group です)。これにより、systemd は直接起動したプロセスのみを強制終了します。
-
start.sh がバックグラウンドで何かを開始して終了するのではなく、フォアグラウンドで実行する
あなたの状況では、オプション 2 が実行可能で、より簡単だと思います。
ソース:https://unix.stackexchange.com/a/231201/45329
KillMode
を変更しても process
まで あなたの状況では以下のように動作しますが、推奨される解決策ではありません.
[Service]
KillMode=process
...
KillMode
の問題 process
に設定 それは systemd
です 開始したプロセスのすべての子に対する制御を失います。つまり、何かが発生し、プロセスの 1 つが何らかの理由で終了しなければ、そのプロセスは残り続けることになります。
あなたの状況でのより良い解決策は、すべてのプロセスを作成し、それらの pid
を保持することです
シェルスクリプトで使用する待機コマンドは、使用しているシェルによって異なる場合があります (私が提案したリンクは bash 用です)。シェル スクリプトにすべての子を待機させることは、フォアグラウンドで切り離されない 1 つの子を開始することと実質的に同じです。
多かれ少なかれ、このようなものです:
#!/bin/bash
# Start your various processes
process1 &
PROCESS1_PID=$!
process2 &
PROCESS2_PID=$!
process3 &
PROCESS3_PID=$!
# Wait on your processes
wait $PROCESS1_PID $PROCESS2_PID $PROCESS3_PID
# OR, if I'm correct, bash also allows you to wait on all children
# with just a plain wait like so:
wait
# reach here only after children 1, 2, and 3 died