私は複数のインスタンスが同時に実行されているbashスクリプトを作成しています。私はこれが起こらないようにしようとしています。だから私は、スクリプトのインスタンスが1つだけ実行されていることを確認するために、群れのメカニズムを使用しています。他のインスタンスは、そのターンを待つ。並行ジョブを順次処理する
exec 200<$LOCK
flock -x 200
echo "secured flock $1"
sleep 10
echo "exit $1"
ただし、この方法では実行の順序での保証はありません。たとえば :
# ~/proj/scripts $ sudo ./parallel.sh 2 &
[2] 10668
# ~/proj/scripts $ sudo ./parallel.sh 3 &
[3] 10674
# ~/proj/scripts $ sudo ./parallel.sh 4 &
[4] 10681
# ~/proj/scripts $ sudo ./parallel.sh 5 &
[5] 10687
# ~/proj/scripts $ sudo ./parallel.sh 6 &
[6] 10696
secured flock 3 exit 3
secured flock 6 exit 6
secured flock 4 exit 4
secured flock 2 exit 2
secured flock 5 exit 5
は私が呼び出し
上記の例の順序を保証すると同じ並行性の保護を達成するためにその可能かどうかを確認しようとしているだけの単純化しすぎです。
これらのプロセスは、通常、5秒ごとに定期的に開始されます。ただし、実行を完了するために時には5秒以上(たとえば10秒)以上かかることがあります。したがって、プロセス2がプロセス3よりも前に開始すると言うことは間違いありませんが、プロセス2が完了するまでに時間がかかる場合は、約5秒後にプロセス4-6が同じ順序で開始する保証はありません。
を実行していますか? – Barmar
解決策が可能かどうかわかりません。プロセス3がプロセス2よりも前に実行を開始したとします。プロセス2を開始することをどのように知っているので、できるだけ早くロックを取得すべきではありませんか? – Barmar
ロックが要求された順に付与されるロック機構が必要なようです。 – Barmar