inotifywaitループの信頼性

inotifywaitループの信頼性

ディレクトリを再帰的に監視するループを持つbashスクリプトがあります。

while true
do
    if path=`inotifywait -q -r -e create --format %w%f $watchpath`; then
        #modify file
    fi
done

私が正しく覚えている場合は、次の問題が発生します。

そのディレクトリに多数のファイルが作成された場合、またはコンピュータが他の操作で忙しい場合、inotifywaitそのファイルは再度到達する前に作成されない可能性があります。つまり、そのファイルは無視されます。

これを軽減する方法はありますか?変更されたファイルストリーム/ソースを継続的に「監視」して処理する方法はありますか?

答え1

inotifywait1つの方法はモニタモードで実行することです。たとえば、次のようになります。

inotifywait -m -q -r -e create --format '%w%f' "$watchpath" |
    while read -r path; do
        : # do something with path
    done

ただし、プロセス間にはまだ競合があり、シェルユーティリティを使用して競合状態を回避する方法があるかどうかはわかりません。

〜でもマニュアルページこれをメモの下にリストします。

inotify APIは、影響を受けるファイルをファイル名で識別します。ただし、アプリケーションがinotifyイベントを処理すると、ファイル名が削除されたか名前が変更された可能性があります。

答え2

ウォッチドッグモードを使用するため、-mファイルinotifywaitシステム変更後に終了せずに標準出力に出力されます。これをinotofywaitの行を読み取って処理するリーダースクリプトにストリーミングできます。

関連情報