特定のプロセスが特定のファイルにアクセスしたときに通知を受けたいトリガーが必要です(たとえば、スクリプトを実行する必要があります)。私が正しく理解したなら、これはうまくいきます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
既存のファイルに書き込むのではなく他のファイルを置き換えると、プログラムmyfile
はinotifywait
終了します。これがほとんどの編集者が働く方法です。この制限を克服するには、
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
ファイルに何かが発生するたびに(読み取り、書き込み、閉じる...)、コンマ区切りの同時イベントのリストとともにスクリプトが呼び出されます。