Docker コンテナで bash スクリプトを正しい順序で実行するにはどうすればよいですか?

Docker コンテナで bash スクリプトを正しい順序で実行するにはどうすればよいですか?

いくつかの小さな 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 psps -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 秒未満になります。

あなたの問題は、あなたが望むことではなく容器次のスクリプトに移動する前に実行を停止しますか?

関連情報