LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

利用perl监控文件状态

时间:2012-12-11 10:01来源:51cto 编辑:mcshell 点击:
作为运维来监控文件的状态可以扩展很多个方面,例如rsync增量备份,监控服务器是否被黑客入侵等等。所以说监控文件的状态至关重要。根据这几天的工作的需求特别写了一个Perl脚本
作为运维来监控文件的状态可以扩展很多个方面,例如rsync增量备份,监控服务器是否被黑客入侵等等。所以说监控文件的状态至关重要。根据这几天的工作的需求特别写了一个Perl脚本,有什么方面没有考虑到的希望大家多多指出。

需要安装的模块:
File::Monitor
File::Find::Rule

安装方法:
win下(需要有perl环境,我这里装的是activeperl)

cmd下进入c:\perl\bin

输入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_log\monitor.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 created\n";   #如果有新文件则重新索引文件
  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:%S\n", localtime($time));
        print FH "$mtime";
}
        }
    }
close FH;
}

测试:
win下:
F:\perl\cu>perl-monitor.pl
建立一个test.txt文件放入F:\mon,查看日志


然后修改test.txt


进行递归目录的创建测试


linux测试:
#./monitor.pl & 后台运行

转载请保留固定链接: https://linuxeye.com/program/1023.html

------分隔线----------------------------
标签:Perl监控文件状态
栏目列表
推荐内容