观察多个目录以创建文件;如果他们不存在,请发送电子邮件

时间:2014-05-13 03:48:06

标签: linux perl bash

我有一个棘手的问题。我需要监视一组文件,看看是否在其中创建了一系列文件。我想大约每10分钟监控一次文件,如果没有创建任何文件,我会通过电子邮件报告。这通过find看起来有点容易,我想做一些像这样的事情,我发现修改时间为10分钟的文件,看看每十分钟有多少变化(应该在10左右左右。)

find . -maxdepth 2 -type f -mmin -10 -ls  2>/dev/null | wc -l

我遇到的问题是时间不是十分钟,有时候会多一点,有时会少一点。另外,我不仅要求检查时间,还要检查其中有时间戳的文件名,例如processa_15:30(以及另一个目录中的processb_15:30,等等)。

我相信inotifywait会对这样的东西有用,但它没有安装,我认为我不能安装它。我更喜欢用bash或Perl来做这个,它是在CentOS 6.0系统上。但是,我也可能无法安装任何Perl模块来执行此操作。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您要监控创建的文件数量,您是否考虑制作一个脚本来检查您使用find查找的文件数量,请睡眠约10分钟(如果他们再多一点或者少一点你的极限,即+ -30秒),检查并比较两个数字和循环?这样你可以使用像这样的函数:

find1=`find . -maxdepth 2 -type f -mmin -10 -ls  2>/dev/null | wc -l`
sleep 600
find2=`find . -maxdepth 2 -type f -mmin -10 -ls  2>/dev/null | wc -l`

if [ "$find1" == "$find2" ]; then
    echo "no new files..." | mail -s "$date : Alert" user@domain.com
else 
    exit
fi

这样你可以比较这两个数字,如果没有变化,那就发电子邮件。

要添加+ -30s的限制,可以在find1和find2之前和之后运行查找和分配数字到变量30s,你可以生成额外的条件,如find1 = find2,但数字在30s之前和之后不同,然后电子邮件。

您还可以根据文件名时间戳等对if循环进行进一步检查,如果是AND等等。

这样你就可以在循环中连续运行该函数。