並列に実行される2つのシェルスクリプトがありますが、一度に1つずつあります。どちらのスクリプトも初期設定ステップを使用するため、時間がかかり、同時に実行することはできません。
残りの並列実行を可能にするには、次のように制御フローの設定ステップをラップします。flock
に基づいてこの提案。
これ〜らしいうまくいきますが、if-else構文が完全に安全であるかどうかはわかりません。ここに私が見逃した隠された問題はありますか?
set -euxo pipefail
(
# Only run setup if we're the first to acquire the lock
if flock -x -n 200 ; then
# Time-consuming setup that can't be run in parallel
else
# Wait for the lock to be released and then continue, timeout on 600s
flock -x -w 600 200;
fi
) 200>/tmp/setup.lock
# Rest of the script that relies on setup being done