inotifyを使用してファイルへのアクセスを監視する

inotifyを使用してファイルへのアクセスを監視する

特定のプロセスが特定のファイルにアクセスしたときに通知を受けたいトリガーが必要です(たとえば、スクリプトを実行する必要があります)。私が正しく理解したなら、これはうまくいきますinotify

ファイルがある場合は、そのファイルを監視するようにどのように/foo/bar.txt設定しますか?inotify

私はDebian Wheezyとカーネル3.12を使用しています(私のカーネルはinotifyをサポートしています)

答え1

~によるとザイルズ存在する:

使いやすいinotify待つ(配布用パッケージのインストールinotify-tools):

while inotifywait -e close_write myfile.py; do ./myfile.py; done

これには大きな制限があります。プログラムがmyfile.py既存のファイルに書き込むのではなく他のファイルを置き換えると、プログラムmyfileinotifywait終了します。これがほとんどの編集者が働く方法です。

この制限を克服するには、inotifywait次のようにします。

while true; do
  change=$(inotifywait -e close_write,moved_to,create .)
  change=${change#./ * }
  if [ "$change" = "myfile.py" ]; then ./myfile.py; fi
done

答え2

inotifyのデフォルトのシェルインタフェースは次のとおりです。inotifywait~からinotify-tools

ファイルへのすべてのアクセスを監視するには:

inotifywait -mq --format '%e' /path/to/file |
while IFS= read -r events; do
  /path/to/script "$events"
done

ファイルに何かが発生するたびに(読み取り、書き込み、閉じる...)、コンマ区切りの同時イベントのリストとともにスクリプトが呼び出されます。

関連情報