0

現在、Bash のロックを検討しています。私が使用しているスクリプトには、同じスクリプトまたは他のスクリプトの複数の呼び出しで同時に使用できるファイルがあります。ファイルへのアクセスを同期するために、ロックファイルを使用しています。

(
   flock -x -w 10 200
   # do stuff with the file $DATAFILE
) 200>$LOCKFILE

これは、私がオンラインで見つけたいくつかの例から取られています。$LOCKFILEただし、追加が実際に必要なのか、それとも直接アクセスをロックできるのか疑問に思ってい$DATAFILEます:

(
   flock -x -w 10 200
   # do stuff with the file $DATAFILE
) 200>>$DATAFILE

これは機能しますか、それともアクセスを同期しようとしているファイルをロックファイルとして使用することに問題がありますか?

4

1 に答える 1

1

新しいファイル記述子を作成する代わりに、既存のファイル記述子をロックできます。その記述子は、データ ファイルに使用するものと同じにすることができます。

exec 200<>$DATAFILE
flock -n 200 || { echo "Already locked"; exit 1; }
# do your stuff with descriptor 200
flock -u 200
# optionally, close the descriptor
exec 200>&-

これは、読み取り専用記述子でも機能します。

exec 200<$DATAFILE
于 2013-05-13T15:57:09.090 に答える