作为运维来监控文件的状态可以扩展很多个方面,例如rsync增量备份,监控服务器是否被黑客入侵等等。所以说监控文件的状态至关重要。根据这几天的工作的需求特别写了一个Perl脚本,有什么方面没有考虑到的希望大家多多指出。
需要安装的模块:
File::Monitor
File::Find::Rule
安装方法:
win下(需要有perl环境,我这里装的是activeperl)
cmd下进入c:perlbin
输入ppm-shell
ppm> install File::Monitor File::Find::Rule
linux下:
命令行输入cpan(如果需要配置cpan,一路回车,最后选个163镜像就好)
cpan>install File::Monitor File::Find::Rule
?
code:
?
- #!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use File::Monitor;
use File::Monitor::Delta;
use File::Monitor::Object;
use File::Find::Rule;
use POSIX qw(strftime);
#my @files=File::Find::Rule->not_name('.*.swp')->in('f:mon','d:24');? #这里可以写多个目录,我这里做测试是用win,linux同理
START:
my @files=File::Find::Rule->not_name('.*.swp')->in('/home/mcshell/cu');
my $monitor=File::Monitor->new();
foreach my $file (@files){
??? $monitor->watch({
???????????????????? name => "$file",
???????????????????? recurse => 1,????????????? #是否递归目录
- }
?????????????????? );
}
- while(1 and sleep 3) { #每一秒检测一次
? my @changes=$monitor->scan;
#open FH,'>>F:monitor_logmonitor.log' or die "$!";? #将变动的文件写入日志
open FH,'>>/var/log/monitor.log' or die "$!";?????? #linux与win的路径
for my $change (@changes) {
??????? my $name???? = $change->name;
??????? my @created = $change->files_created;
??????? my @deleted =? $change->files_deleted;
??????? if (@deleted){
??????? }
????? if(@created){
??????? print FH "@created The createdn";?? #如果有新文件则重新索引文件
? goto START;
}
??????? if($change->is_mtime){? #判断是否为修改文件
- ??????? print FH $change->name."======>";
??????? if ($change->is_size ) {? #如果大小变化则判断变化多少
- ???????? my $old_size = ($change->old_size)||0;
??????????? my $new_size = ($change->new_size)||0;
??????????? print FH "has changed size from $old_size to $new_size"."====>";
??????? }
??????? my $time = $change->new_mtime;
??????? if(defined $time){
??????? my $mtime = strftime("%Y-%m-%d %H:%M:%Sn",localtime($time));
??????? print FH "$mtime";
}
??????? }
??? }
close FH;
}
- ?
测试:
win下:
F:perlcu>perl-monitor.pl
建立一个test.txt文件放入F:mon,查看日志
?
?
然后修改test.txt
?
进行递归目录的创建测试。
?
?
linux测试:
#./monitor.pl & 后台运行
?