Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何排除或不打印脚本中以前找到的条目_Perl - Fatal编程技术网

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

Perl 如何排除或不打印脚本中以前找到的条目,perl,Perl,有人能告诉我,只有在当前一小时内找到新条目时,我的脚本才能启动吗?我们的日志以00 01 02等为基础 当此操作运行时,它将查找myfor循环中指定的任何帐户,并在该特定用户更改证书一小时后发送电子邮件。如果找到匹配项,则一切正常 但我只对新的实时条目感兴趣,我想不出来 这将从cron运行,我不能让它重复相同的条目。我是Perl新手,似乎无法理解这一点 我尝试过该模块和其他CPAN MOD,但由于公司政策,一些MOD是不允许的 #!/usr/bin/perl -w use strict; my

有人能告诉我,只有在当前一小时内找到新条目时,我的脚本才能启动吗?我们的日志以00 01 02等为基础

当此操作运行时,它将查找my
for
循环中指定的任何帐户,并在该特定用户更改证书一小时后发送电子邮件。如果找到匹配项,则一切正常

但我只对新的实时条目感兴趣,我想不出来

这将从cron运行,我不能让它重复相同的条目。我是Perl新手,似乎无法理解这一点

我尝试过该模块和其他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;
#/usr/bin/perl-w
严格使用;
我的$flag=0;
我的$NOW=shift | | 1;
我的$id;
我的$newline;
我的$partyId;
我的$userid;
我的$tid;
我的$infle;
my@Takeraccounts=('SCN','CX');
我的$mail目的地:xxxxx@cx.com';
我的%时间;
(
$TIME{SEC},$TIME{MIN},$TIME{HOUR},$TIME{MDAY},$TIME{MON},
$TIME{YEAR},$TIME{WDAY},$TIME{YDAY},$TIME{ISDST}
)=本地时间(time);
my$OLD_MIN=$TIME{MIN};
我的$OLD_HOUR=$TIME{HOUR};
my$cmd=“cat/raid/logs/`date+%H`”;
my$out_file=“/home/resource/certchange.txt”;
打开FF,“$cmd |”;
打开(OUT,“>>$OUT_文件”)| | die“无法打开$OUT_文件”#要将格式化输出写入的临时文件
而(){
我的$line=$\ux;
#chomp($now_time);
$line=~s/\n/;
如果(/更新证书/。/,权限/){
$newline=“$line”;
如果($line=~/updateing cert.*由(\w+/)更新){
$id=$1;
}
if($newline=~/UPDATE.*id:(\w+).*partyId:(\w+),perm:/){
$userid=$1;
$partyId=$2;
foreach(@Takeraccounts){
如果($partyId=~/$\uux/){
打印“userid$userid,PartyID$PartyID的证书证书证书由$id更新\n”;
打开ML,“|mutt-e\”设置realname='Support';设置use_from=yes;设置from='Support\@cx.com';设置信封\u from=yes\”-s“警报!证书已更改”-i$out\u文件--$mail\u dest”;
关闭ML;
}
}
}
}
}
关闭FF;
收尾;
取消$out_文件的链接;

每次成功发送信函时,请将已处理的用户名保存为散列格式,并将其序列化为某个文件/DB。在下一次运行时,请阅读并忽略已在此哈希中的用户。请澄清:您解析日志并检查用户是否进行了更改。如果是这样,你就发邮件。请您澄清问题所在以及您的意思:“但我只对新的实时条目感兴趣”,因此,如果某个特定用户进行了更改,则id、userid和partyid将写入文件,然后将内容发送到电子邮件警报。由于脚本每分钟在cron上运行一次,因此如果下次运行时日志文件没有更改,则会针对进行这些更改的前一个用户id发送重复的电子邮件警报。我试图通过日志没有更改以及更改为不执行任何操作的同一用户id来避免这种情况的发生。我一直在读关于使用散列的书,但我对perl还是很陌生,正在努力寻找解决方案;每次成功发送一封信时,请将已处理的用户名保存为散列格式,并将其序列化为某个文件/DB。在下一次运行时,请阅读并忽略已在此哈希中的用户。请澄清:您解析日志并检查用户是否进行了更改。如果是这样,你就发邮件。请您澄清问题所在以及您的意思:“但我只对新的实时条目感兴趣”,因此,如果某个特定用户进行了更改,则id、userid和partyid将写入文件,然后将内容发送到电子邮件警报。由于脚本每分钟在cron上运行一次,因此如果下次运行时日志文件没有更改,则会针对进行这些更改的前一个用户id发送重复的电子邮件警报。我试图通过日志没有更改以及更改为不执行任何操作的同一用户id来避免这种情况的发生。我一直在读关于使用散列的书,但我对perl还是很陌生,正在努力寻找解决方案;