Is there a simple solution (using common shell utils, via a util provided by most distributions, or some simple python/... script) to restart a process when some files change?
It would be nice to simply call sth like watch -cmd "./the_process -arg" deps/*
.
Update: A simple shell script together with the proposed inotify-tools (nice!) fit my needs (works for commands w/o arguments):
#!/bin/sh
while true; do
$@ &
PID=$!
inotifywait $1
kill $PID
done
This is an improvement on the answer provided in the question. When one interrupts the script, the run process should be killed.
Check out
iWatch
:than, you could watch files easily:
Yes, you can watch a directory via the inotify system using
inotifywait
orinotifywatch
from the inotify-tools.inotifywait
will exit upon detecting an event. Pass option-r
to watch directories recursively. Example:inotifywait -r mydirectory
.You can also specify the event to watch for instead of watching all events. To wait only for file or directory content changes use option
-e modify
.I find that this suits the full scenario requested by the PO quite very well:
See also http://eradman.com/entrproject/, although a bit oddly documented. Yes, you need to
ls
the file pattern you want matched, and pipe that into theentr
executable. It will run your program and rerun it when any of the matched files change.