web-dev-qa-db-ja.com

シェルスクリプトからファイルをロックする方法

ファイルロックを介して2つのBashスクリプトを同期したいと思います。これを行う方法? Zshにはzsystem flock呼び出しですが、Bashでも使用できる「シェルっぽい」メソッドはありますか?

3
Itzie

ファイル自体をロックする以外に、ロックとして使用されるファイル(lockfile)を作成できます。このためのユーティリティがたくさんあります。 procmailには lockfile があり、Debianではliblockfile-binパッケージにdotlockfileがあります。 Procmailは、ほとんどのシステムで使用できるように十分に一般的である必要があります。

しかし、基本的には次のようなものになります。

tempfile=$(mktemp ./lock.XXXX)
lockfile=./lockfile
if ln $tempfile $lockfile ; then
    echo got it
    # do something
    rm $lockfile # after you're done
else 
    echo did not succeed
fi
rm $tempfile

lnは、echo > fileのようなものとは異なり、ターゲットがすでに存在している場合はそれを破壊しません。代わりに、チェックできるエラーが発生します。

注:ロックをかけたい場合[〜 #〜] nfs [〜#〜]、その目的のために作成されたツールを使用します。 NFSを介したファイルへの同時アクセスのセマンティクスは...控えめに言っても興味深いです。

6
ilkkachu