if-elseを使用したクラスタリングは安全ですか?

if-elseを使用したクラスタリングは安全ですか?

並列に実行される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

ベストアンサー1

おすすめ記事