加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

利用perl监控文件状态

发布时间:2020-12-15 21:00:32 所属栏目:大数据 来源:网络整理
导读:作为运维来监控文件的状态可以扩展很多个方面,例如rsync增量备份,监控服务器是否被黑客入侵等等。所以说监控文件的状态至关重要。根据这几天的工作的需求特别写了一个Perl脚本,有什么方面没有考虑到的希望大家多多指出。 需要安装的模块: File::Monitor

作为运维来监控文件的状态可以扩展很多个方面,例如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:

?

 
 
  1. #!/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,????????????? #是否递归目录
  2. }
    ?????????????????? );
    }
  3. 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){? #判断是否为修改文件
  4. ??????? print FH $change->name."======>";
    ??????? if ($change->is_size ) {? #如果大小变化则判断变化多少
  5. ???????? 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;
    }
  6. ?

测试:

win下:

F:perlcu>perl-monitor.pl

建立一个test.txt文件放入F:mon,查看日志

?

?

然后修改test.txt

?

进行递归目录的创建测试。

?

?


linux测试:

#./monitor.pl & 后台运行

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读