フォルダに一度に1つのインスタンスだけがファイルにアクセスできるようにするにはどうすればよいですか?

フォルダに一度に1つのインスタンスだけがファイルにアクセスできるようにするにはどうすればよいですか?

複数のインスタンスで実行されるシェルスクリプトがあります。あるインスタンスがファイルにアクセスして操作を実行している場合、別のインスタンスが同じファイルにアクセスしてデータが破損しないようにするにはどうすればよいですか。

私の質問は、並列実行制御に関するものではなく、ファイルロックまたは表示メカニズムを扱うことです。

続行するためにいくつかのアドバイスを求めます。

ベストアンサー1

Linuxは通常、Windowsとは異なりロックを実行しません。これには多くの利点がありますが、ファイルをロックする必要がある場合はいくつかのオプションがあります。私はお勧めします

グループ:開いているファイルにアドバイザリロックを適用または削除する

このユーティリティは、シェルスクリプト内またはコマンドラインでクラスタ(2)ロックを管理します。

単一のコマンド(またはフルスクリプト)の場合は、次のものを使用できます。

flock --exclusive /var/lock/mylockfile -c command

ロック状態でスクリプトでより多くのコマンドを実行するには、次のようにします。

#!/bin/bash
 .... 

(
flock --nonblock 200 || exit 1
# ... commands executed under lock ...
) 200>/var/lock/mylockfile 

flockサブシェル内の呼び出し以降のすべての操作は、現在保持している他のプロセスがない場合にのみ実行されます。サブシェルが終了すると、ロックは自動的に解放されます。(...)flock/var/lock/mylockfile

flockファイルロックが削除されるのを待つこともできます(デフォルト)。この場合、この--nonblockオプションを使用しないでください。flockロックを正常に獲得できないと失敗します。

おすすめ記事