如何在脚本中排除或不打印以前找到的条目

时间:2016-03-24 15:46:17

标签: perl

有人可以了解如何在当前时间找到新条目时启动脚本吗?我们的日志基于00 01 02等。

当此操作运行时,它将查找我的for循环中指定的任何帐户,并在此特定用户对该小时进行证书更改时发送电子邮件。如果发现匹配,那么一切都很好。

但我只对新的实时条目感兴趣,我无法弄清楚。

这将从cron运行,我不能重复相同的条目。我是Perl的新手,似乎无法解决这个问题。

我已尝试过File::Tail模块和其他CPAN mod,但由于公司政策,不允许使用某些mod。

#!/usr/bin/perl -w
use strict;

my $flag = 0;
my $few = shift || 1;
my $id;
my $newline;
my $partyId;
my $userid;
my $tid;
my $infile;
my @Takeraccounts = ( 'SCN', 'CX' );
my $mail_dest = 'xxxxx@cx.com';

my %TIME;

(
    $TIME{SEC},  $TIME{MIN},  $TIME{HOUR}, $TIME{MDAY}, $TIME{MON},
    $TIME{YEAR}, $TIME{WDAY}, $TIME{YDAY}, $TIME{ISDST}
) = localtime(time);

my $OLD_MIN  = $TIME{MIN};
my $OLD_HOUR = $TIME{HOUR};

my $cmd      = "cat /raid/logs/`date +%H`";
my $out_file = "/home/resource/certchange.txt";

open FF, "$cmd |";
open( OUT, ">> $out_file" ) || die "Cannot open $out_file";    # temp file to which to write the formated output

while ( <FF> ) {

    my $line = $_;

    #chomp ($now_time);
    $line =~ s/\n/ /;
    if ( /Updating cert/ .. /,permissions/ ) {

        $newline = "$line";

        if ( $line =~ /Updating cert.*updated by (\w+)/ ) {
            $id = $1;
        }

        if ( $newline =~ /UPDATE.*id:(\w+).*partyId:(\w+),perm:/ ) {

            $userid  = $1;
            $partyId = $2;

            foreach (@Takeraccounts) {

                if ( $partyId =~ /$_/ ) {
                    print OUT "Certificate cert Updated by $id for userid $userid, PartyID $partyId\n";
                    open ML, "| mutt -e\"set realname='Support'; set use_from=yes; set from='support\@cx.com'; set envelope_from=yes\" -s ' Alert! cert CHANGED' -i $out_file -- $mail_dest";
                    close ML;
                }
            }
        }
    }
}

close FF;
close(OUT);

unlink $out_file;

0 个答案:

没有答案