There is an option -d (demon but I haven't tested)1. Create a folder called "watchlog"(/path/to/watchlog) and create the script to watch in the folder "/temp/watch"
inotify_folder.sh
#!/bin/bash
log_dir="log/"
log_file="watchlog.log"
while true
do
ts=$(date +"%C%y%m%d")
OUTPUT="$(inotifywait -r -e modify,create,delete --format '%T %:e %w%f' --timefmt '%c' /temp/watch | awk '{print $4" "$6" "$7}' )"
#$4 time of change
#$6 event
#$7 file path
echo "${OUTPUT}" >> $log_dir$ts$log_file
php inotify_php.php $OUTPUT
done
inotifywait is using the parameter -r to watch recursive, if there are a lot of level and files inotify can take a while to start.
the paremter -e specify wich actions we want to watch, there more actions by default.2. Create the folder /log in the same level to save the logs. 3. Create the script that will be call by the cron to check if the script 'inotify_folder.sh' is running
inotify_cron.sh
#!/bin/bash
running=`ps auxf | grep inotify_folder | grep -v grep`
if [ -z "$running" ]
then
/bin/bash inotify_folder.sh
fi
4. Create the PHP script to send the emailinotify_php.php
<?php
$receivers = array('user@mail.com');
$time = $argv[1];
$event = $argv[2];
$file = $argv[3];
foreach($receivers as $receive){
mail($receive,'Alert on file '.$file.' with a '.$event,$event.' '.$file);
}
5. Set a cron to check every one minute
*/1 * * * * root cd /path/to/watchlog; sh inotify_cron.sh
No comments:
Post a Comment