I would like to have a trigger and when a particular file is accessed by some process, I would like to be notified (i.e. a script should be run). If I understand correctly, this could be achieved with inotify.
If I have a file /foo/bar.txt how would I set up inotify to monitor that file?
I am using Debian Wheezy with kernel 3.12 (my kernel has inotify support)
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
According to Gilles on Super User:
Simple, using inotifywait (install your distribution’s
inotify-toolspackage):while inotifywait -e close_write myfile.py; do ./myfile.py; doneThis has a big limitation: if some program replaces
myfile.pywith a different file, rather than writing to the existingmyfile,inotifywaitwill die. Most editors work that way.To overcome this limitation, use
inotifywaiton the directory:while true; do change=$(inotifywait -e close_write,moved_to,create .) change=${change#./ * } if [ "$change" = "myfile.py" ]; then ./myfile.py; fi done
Method 2
The basic shell interface to inotify is inotifywait from inotify-tools.
To monitor all accesses to a file:
inotifywait -mq --format '%e' /path/to/file | while IFS= read -r events; do /path/to/script "$events" done
Your script is called with a comma-separated list of simultaneous events, each time something happens to the file (read, write, close, …).
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0