
いくつかの小さな bash スクリプトを実行するメインの bash スクリプトがあります (それぞれの小さなスクリプトは docker コンテナを実行します)。ただし、2 番目のスクリプトは最初のスクリプトの実行が終了した後にのみ実行し、以降も同様に実行したいです。つまり、各スクリプトのプロセスが同時に実行されないようにしたいのです。例:
1st_script.sh param1 param2 param3
2nd_script.sh param1 param2
オンラインの提案は私には役に立ちません。1st_script の PID を取得しようとしました:
1st_Script & echo $!
しかし、PIDは表示されますps -p <PID> || <2nd_script>
が、プロセスがあるかどうかをチェックすると何も表示されません。1st_scriptが実行されているのは、それが実行されるdockerコンテナがでリストされているからです。したがって、そのプロセスもでリストされているはずです。<1st_Script> & echo $!
ps -p <PID>
docker ps
ps -p <PID>
1st_Script && 2nd_Script && 3rd_Script && ...
スクリプトが多すぎて読みにくいので選択肢にありません
答え1
継続行を使用すると、読みやすさが大幅に向上します。
script1 && script2 && script3 && scriptn
対
script1 \
&& script2 \
&& script3 \
&& scriptn
しかし、あなたの問題を再現するのに苦労しています。あなたのスクリプトがない順番に実行していますか?
私は2つのテストスクリプトを作成しました。それぞれに
echo hello
sleep 15s
そして、スクリプトには
./script1
./script2
time
そして、次の出力を得るために待機時間を測定し、
hello
hello
real 0m30.003s
user 0m0.002s
sys 0m0.001s
スクリプトを同時に実行した場合、かかる合計時間は 30 秒未満になります。
あなたの問題は、あなたが望むことではなく容器次のスクリプトに移動する前に実行を停止しますか?