incron
is an inotify-based cron system.
You can make it do stuff (like trigger a script) when files or
directories change, are opened, closed, etc (i.e., "filesystem events").
You need a 2.6.13 kernel or higher to use it.
# CentOS/RHEL
sudo yum install incron --yes
# Ubuntu
sudo apt-get install incron --yes
The global config file is /etc/incron.conf
. Now make sure you start
the service (might be a good idea to chkconfig
this too):
# CentOS/RHEL
service incrond start
# Ubuntu
/etc/init.d/incron start
You can get a listing of events by issuing:
[root@example ~]# incrontab -t
IN_ACCESS,IN_MODIFY,IN_ATTRIB,IN_CLOSE_WRITE,IN_CLOSE_NOWRITE,IN_OPEN,
IN_MOVED_FROM,IN_MOVED_TO,IN_CREATE,IN_DELETE,IN_DELETE_SELF,IN_CLOSE,
IN_MOVE,IN_ONESHOT,IN_ALL_EVENTS,IN_DONT_FOLLOW,IN_ONLYDIR,IN_MOVE_SELF
You can find an explanation of each in /usr/include/linux/inotify.h
.
For example:
26 /* the following are legal, implemented events that user-space can watch for */
27 #define IN_ACCESS 0x00000001 /* File was accessed */
28 #define IN_MODIFY 0x00000002 /* File was modified */
29 #define IN_ATTRIB 0x00000004 /* Metadata changed */
30 #define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed */
31 #define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed */
32 #define IN_OPEN 0x00000020 /* File was opened */
33 #define IN_MOVED_FROM 0x00000040 /* File was moved from X */
34 #define IN_MOVED_TO 0x00000080 /* File was moved to Y */
35 #define IN_CREATE 0x00000100 /* Subfile was created */
36 #define IN_DELETE 0x00000200 /* Subfile was deleted */
37 #define IN_DELETE_SELF 0x00000400 /* Self was deleted */
38 #define IN_MOVE_SELF 0x00000800 /* Self was moved */
Start editing your incrontab with incrontab *-e*
. Here are some
examples of traps
# Restart the NTP daemon when its config file changes
/etc/ntp/ntp.conf IN_MODIFY /sbin/service ntpd restart
# Run a script with the absolute path to filename as parameter when it changes (and is closed)
/home/nanand/thesis.txt IN_WRITE_CLOSE /home/nanand/bin/log_changes.sh $@/$#
Here is a full list of wildcards:
$$ - a dollar sign
$@ - the watched filesystem path
$# - the event-related file name
$% - the event flags (textually)
$& - the event flags (numerically)
/usr/share/doc/incron/README
(Ubuntu)/usr/share/doc/incron-0.5.5/README
(CentOS/RHEL)