I have a bash script that processes some data using inotify-tools to know when certain events took place on the filesystem. It works fine if run in the bash console, but when I try to run it as a daemon it fails. I think the reason is the fact that all the output from the inotifywait
command call goes to a file, thus, the part after | while
doesn't get called anymore. How can I fix that? Here is my script.
#!/bin/bash
inotifywait -d -r \
-o /dev/null \
-e close_write \
--exclude "^[\.+]|cgi-bin|recycle_bin" \
--format "%w:%&e:%f" \
$1|
while IFS=':' read directory event file
do
#doing my thing
done
So, -d
tells inotifywait
to run as daemon, -r
to do it recursively and -o
is the file in which to save the output. In my case the file is /dev/null
because I don't really need the output except for processing the part after the command (| while...
)
You don't want to run
inotify-wait
as a daemon in this case, because you want to continue process output from the command. You want to replace the-d
command line option with-m
, which tellsinotifywait
to keep monitoring the files and continue printing tostdout
:If you want things running in the background, you'll need to background the entire script.