#!/usr/bin/perl #取文件行数 ##循环开始清空文件 use POSIX; use DBI; my $dir = '/data01/applog_backup'; my $file = "$ARGV[0]"; my $SDATE = strftime("%Y-%m-%d",localtime()); my $XDATE = strftime("%Y%m%d%H%M%S",localtime()); my $mon_file = "$dir/$file"; my $USER="$ARGV[1]"; my $IP="$ARGV[2]"; my $ENV="$ARGV[3]"; my $dbUser='DEVOPS'; my $user="root"; my $passwd="1234567"; my $dbh = DBI->connect("dbi:mysql:database=$dbUser;host=192.168.32.161;port=3306",$user,$passwd) or die "can't connect to database ". DBI-errstr; $dbh->do("SET NAMES utf8"); open FILE,">tmp.out"; close FILE; open( A, "<", "count.txt" ); while (<A>) { $count = $_; }; print "上次记录的记录数为$count "; open(my $fh, '<', "$mon_file"); $. = 0; while (<$fh>) { ($num=$.) if eof; }; print "文件最新的记录数为$num"." "; open( B, ">", "count.txt" ); print B ("$num "); ###获取增量记录 if ( $count && $num != $count && $num !=0 ) { print "开始处理 "; open( C, "<", "$mon_file" ) || die "$! "; while (<C>) { if ($. > "$count" ) { open( D, ">>", "tmp.out" ); print D ("$_"); } } }; close D; ##########监控关键字,以空格隔开################ my @warn_arr = qw/Exception Err/; my @exp=qw/testscan HandleProxyTradeGroup/; ##$i 是匹配的次数,$b是最后一个匹配的行HandleProxyTradeGroup foreach $a (@warn_arr) { my $i = 0; my $num = 0; my $b = 0; open( D, "<", "tmp.out" ) || die "$! "; while (<D>) { my @err_info=(); $num++; if (( $_ =~ /$a/i ) and ($_ !~ /HandleProxyTradeGroup/)) { $b = $num ; print "$b is $b "; open( E, "<", "tmp.out" ) || die "$! "; while (<E>) { $_ =~ s/'//g; if (($. >= "$b") and ($. <= "$b" + 5) ){push( @err_info, $_ ) };}; close E; chomp @err_info; print @err_info; print " "; $dbh->do("INSERT INTO err_info(host_name,host_ip,v_date,info,env) values('$USER','$IP','$XDATE','@err_info','$ENV')") or die($DBI::errstr); }; }; close D; };