我想要一个触发器,当某个进程访问特定文件时,我希望收到通知(即应该运行脚本)。如果我理解正确的话,这可以通过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 的基本 shell 接口是inotifywait
从inotify-tools
。
要监视对文件的所有访问:
inotifywait -mq --format '%e' /path/to/file |
while IFS= read -r events; do
/path/to/script "$events"
done
每次文件发生某些情况(读、写、关闭……)时,都会使用逗号分隔的同时发生的事件列表来调用您的脚本。