How to execute a command when a file change ?
Published by Éric Le Merdy
Use incron ! It is similar to cron that triggers commands based on time. Incontab triggers commands based on file system changes.
1. Install incron
sudo apt-get install incron
2. List your incron jobs
user 'ericlemerdy' is not allowed to use incron
3. Authorize your user to have incron job
sudo whoami >> /etc/incron.allow
4. List your incron jobs
no table for ericlemerdy
5. Add a job to your incron
Your text editor is now opened, ready to add your first job.
6. Help on job syntax
man 5 incron
The syntax is :
<path> <mask> <command>
Incron will examine your
<path> based on the
<mask> that can be
IN_MODIFY for exemple and then executes your
/home/ericlemerdy/tutorial.txt IN_MODIFY pandoc -s --webtex -i -t slidy $@ -o /home/ericlemerdy/tutorial.html
This jobs inspects the file
/home/ericlemerdy/tutorial.txt. Every time the file is modified (according to the
IN_MODIFY mask), a documentation is generated through a command.
Note the use of
$@ in the command. This is replaced with the examined path.
7. Tracking job execution
You can follow the incron activity through the
tail -f /var/log/syslog
You should get :
Feb 25 17:29:36 harukiya incrond: starting service (version 0.5.9, built on May 10 2010 14:59:40) Feb 25 17:29:36 harukiya incrond: loading system tables Feb 25 17:29:36 harukiya incrond: loading user tables Feb 25 17:29:36 harukiya incrond: ready to process filesystem events Feb 25 17:59:49 harukiya incrond: table for user ericlemerdy created, loading Feb 25 18:01:23 harukiya incrond: (ericlemerdy) CMD (pandoc -s --webtex -i -t slidy /home/ericlemerdy/tutorial.txt -o /home/ericlemerdy/tutorial.html)
Incron can be very helpful to execute your tests when your code change or generate a webpage when the sources are changing.