最近有一个需求,监控某台ftp服务器上是否有人上传了文件,然后自动发信通知。
要解决以上问题,当然是分2步,1,监视文件变化,2,发信通知。测试依然是在vps上实现.
首先要了解3个工具Inotify、iWatch、inotifywait.
Inotify 是一个 Linux 2.6.13以上内核的特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。效率很高。 上次我所用到的sersync文件同步就是基于inotify.
iWatch 是一个基于inotify简单的perl脚本,用来监控文件或目录的变化然后发送邮件。
inotifywait是 inotify-tools工具下的一个命令,同样基于inotify. 写上几行简单的脚本就可以开始监视文件并发信了。
1,使用 iWatch现成的perl脚本来监控文件变化并发信
a.下载 iwatch最新版 0.2.2 16K的小文件,地址 http://sourceforge.net/projects/iwatch/files/
iwatch常用命令如下:
./iwatch -r -e create -m [email protected] /home &
-r参数监视 /home文件夹以下目录和文件
-e events事件 此处监控 create 文件创建事件即可
-m 邮箱地址
更多参数请自行参考帮助 iwatch --help
当然运行iwatch时vps默认环境会缺少一些perl模块,按照提示安装即可。
大概步骤如下
- perl -MCPAN -e shell 首先配置cpan初始环境 ,也可以之后cpan模式下运行 o conf init命令重新配置
cpan提示符下 cpan[1]>运行 install +缺失模块名
- 如 cpan> install XML::LibXML
- cpan> install Bundle::LWP
- cpan> install XML::SimpleObject::LibXML
- cpan> install Bundle::CPAN
搞定收工,iwatch所需模块装好后就可以运行iwatch命令了
./iwatch -r -e create -m [email protected] /home &
在配置好邮件服务之后,当ftp服务器上有人开始上传后会收到如下类似内容的邮件、
主题 [iWatch] wanjie.info: IN_CREATE /home/F017/sina-vs-youku-tudou.jpg
正文 [ 2/Mar/2011 15:30:52] IN_CREATE /home/F017/sina-vs-youku-tudou.jpg
大功告成,最后看了下iwatch帮助,发现可以使用xml格式的配置文件 如 iwatch -f config.xml
这样iwatch可以监视多个路径下的文件里,更据实用价值。
~~~~~~~~~手动分割线~~~~~~~~~~~~~~~~~~~
下面再来讲讲谈谈 inotifywait配合shell脚本实现文件监控与邮件发送的办法。
即方法2.呵呵。当时自己没搞定iwatch在perl下的缺失模块,找到了这个小工具。然后写了一个不咋样的脚本,也实现了监控及邮件发送的需求。
下载地址 inotifywait
centos可以直接安装 yum install inotify-tools
俺的自编脚本来了,呵呵。下载地址 http://vpscloud.googlecode.com/files/inotifywait-sendmail-shell.sh
#!/bin/sh
inotifywait -e create -mrq /home|while read line;
do
echo -n "$line " >> /var/log/inotify.log
echo date | cut -d " " -f1-4
>> /var/log/inotify.log
mail -s "user works was upload success" < /var/log/inotify.log [email protected]
done
开始监视后收到类似邮件
/home/F017/ CREATE sersync2.txt Wed Mar 2
大功告成!
怎么感觉inotifywait比iwatch执行效率高啊。邮件前者要快一步。
文章评论