forked from ar-/incron
-
Notifications
You must be signed in to change notification settings - Fork 1
/
README
181 lines (134 loc) · 5.84 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
inotify cron system
===================
(c) Andreas Altair Redmer, 2014, 2015
Lukas Jelinek, 2006, 2007, 2008, 2009, 2012
Content
=======
1. About
2. Install a binary version
3. Obtain the source code
4. Requirements
5. How to build
6. How to use
7. Bugs, suggestions
8. Licensing
1. About
========
This program is the "inotify cron" system. It consist of a daemon and
a table manipulator. You can use it a similar way as the regular cron.
The difference is that the inotify cron handles filesystem events
rather than time periods.
This project was kicked off by Lukas Jelinek in 2006 and then
unfortunatally abandoned in 2012. Upstream development and
bug-tracking/fixing continued in 2014 on GitHub:
https://github.com/ar-/incron .
2. Install a binary version
===========================
On Debian and Ubuntu based systems you can install this software with
sudo apt-get install incron
On all other Linux based systems you have to build it from source.
3. Obtain the source code
=========================
You can download the latest stable version from
https://github.com/ar-/incron/archive/master.tar.gz
You can download older versions from
https://github.com/ar-/incron/releases
4. Requirements
===============
* Linux kernel 2.6.13 or later (with inotify compiled in)
* inotify headers (inotify.h, sometimes inotify-syscalls.h) installed in
<INCLUDE_DIR>/sys. The most common place is /usr/include/sys.
* GCC 4.x compiler (probably works also with GCC 3.4, possibly with
older versions too)
5. How to build
===============
Short:
make -j8 && sudo make install
Long:
This software does not contain a standard
portable build mechanism. There is only a Makefile which may be
modified manually. On many Linux systems you need not to change
anything.
Please review the Makefile BEFORE you type 'make'. Especially
check the PREFIX and other common variables. If done you can
now build the files ('make').
The binaries must be of course installed as root.
If you want to use (after editing) the example configuration
file simply rename it from /etc/incron.conf.example to
/etc/incron.conf (you can also use -f <config> for one-time
use of a custom configuration file).
Making a release of the source tree relies on the 'VERSION' file.
The file should contain only a simple version string such as '0.5.9'
or (if you wish) something more comlex (e.g. '0.5.9-improved').
The doxygen program must be installed and its control file 'Doxygen'
created for generating the API documentation.
6. How to use
=============
The incron daemon (incrond) must be run under root (typically from
runlevel script etc.). It loads the current user tables and hooks
them for later changes.
The incron table manipulator may be run under any regular user
since it SUIDs. For manipulation with the tables use basically
the same syntax as for the crontab program. You can import a table,
remove and edit the current table.
The user table rows have the following syntax:
<path> <mask> <command>
Where:
<path> is a filesystem path (currently avoid whitespaces!)
<mask> is a symbolic (see inotify.h; use commas for separating
symbols) or numeric mask for events
<command> is an application or script to run on the events
The command may contain these wildcards:
$$ - a dollar sign
$@ - the watched filesystem path (see above)
$# - the event-related file name
$% - the event flags (textually)
$& - the event flags (numerically)
The mask may additionaly contain a special symbol loopable=true which
disables events occurred during the event handling (to avoid loops).
It also may contain recursive=false to ignore sub-directories.
The mask can also be extended by dotdirs=true which will include
dotdirectories (hidden directories and hidden files) into the search.
**Example 1**: You need to run program 'abc' with the full file path as
an argument every time a file is changed in /var/mail. One of
the solutions follows:
/var/mail IN_CLOSE_WRITE abc $@/$#
Example 2: You need to run program 'efg' with the full file path as
the first argument and the numeric event flags as the second one.
It have to monitor all events on files in /tmp. Here is it:
/tmp IN_ALL_EVENTS efg $@/$# $&
Since 0.4.0 also system tables are supported. They are located in
/etc/incron.d and their commands use root privileges. System tables
are intended to be changed directly (without incrontab).
Some parameters of both incrontab and incrond can be changed by
the configuration. See the example file for more information.
Example 3: You need to run program 'playmp3' with the full file path as
an argument every time a MP3 file is moved to in /home/u1/Music. One of
the solutions follows:
/home/u1/Music/*.mp3 IN_MOVED_TO playmp3 $@/$#
Example 4: You need to observe the directory /etc/
recursively and report every change in the syslog. One of
the solutions follows:
/etc/ IN_CLOSE_WRITE echo $@/$# | logger
Example 5: You need to observe the directory /etc/apache
but exclude the sub-directories and report every change in the syslog.
One of the solutions follows:
/etc/apache IN_CLOSE_WRITE,recursive=false echo $@/$# | logger
Example 6: You need to observe the directory /home/user1
recursively, including all the hidden sub-directories and hidden files
(dotfiles/dotdirectories) and report every change in the syslog.
One of the solutions follows:
/home/user1 IN_CLOSE_WRITE,dotdirs=true echo $@/$# | logger
7. Bugs, suggestions
====================
incrond is currently not resistent against looping.
If you find a bug or have a suggestion how to improve the program,
please use the bug tracking system at
https://github.com/ar-/incron/issues.
8. Licensing
============
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License,
version 2 (see LICENSE-GPL).
Some parts may be also covered by other licenses.
Please look into the source files for detailed information.