我正在制作一个shell脚本,它可以"在任何新文件进入特定目录时向我发送电子邮件,并带有新文件的名称大小和时间戳"。
以下代码做得很好:
#!/bin/bash
monitor_dir=/path/to/dir
email=me@me.com
files=$(find "$monitor_dir" -maxdepth 1 | sort)
IFS=$'n'
while true
do
sleep 5s
newfiles=$(find "$monitor_dir" -maxdepth 1 | sort)
added=$(comm -13 <(echo "$files") <(echo "$newfiles"))
[ "$added" != "" ] &&
find $added -maxdepth 1 -printf '%Tct%st%pn' |
mail -s "incoming" "$email"
files="$newfiles"
done
现在我想要cronjob的相同功能。这样我就可以每隔15分钟安排一次,并在每15分钟的脚本运行中检查电子邮件新文件退出
请建议。。。
您的cron应该是…
*/15 * * * * /path/to/your/script
还有你的剧本。。。
if [ ! -f /tmp/filemonitor.lck ]; then
touch /tmp/filemonitor.lck
monitor_dir=/path/to/dir
email=me@gmail.com
if [ ! -f /tmp/oldmonitor.txt ];then touch /tmp/oldmonitor.txt; fi;
find "$monitor_dir" -maxdepth 1 | sort > /tmp/actual_monitor.txt
added=$(comm -13 /tmp/oldmonitor.txt /tmp/actual_monitor.txt)
echo $added
[ "$added" != "" ] &&
find $added -maxdepth 1 -printf '%Tct%st%pn' |
mail -s "incoming" "$email"
rm -f /tmp/oldmonitor.txt
mv /tmp/actual_monitor.txt /tmp/oldmonitor.txt
rm -f /tmp/filemonitor.lck
fi;
不得不更改文件的vars,但已测试并运行!!!
您应该使用inotifywait
更多信息和手册页:http://linux.die.net/man/1/inotifywait
使用这个:
monitor_dir=/tmp/1123
while true
do
d=$(inotifywait -e create $monitor_dir --format "%f" 2>/dev/null)
if [[ -f $d ]]
then
#echo "filename is: " $monitor_dir/$d
find $monitor_dir/$d -printf '%Tct%st%pn'
fi
done