跨旋转监视Perl中的文件内容
发布时间:2020-12-16 06:06:12 所属栏目:大数据 来源:网络整理
导读:下午好, 我有一个小的Perl脚本,它基本上模拟了Minecraft server.log上的tail -f功能.该脚本检查某些字符串并以各种方式执行操作. 该脚本的简化版本如下: #!/usr/bin/perluse 5.010;use warnings;use strict;my $log = "PATH TO LOG";my $curpos;open(my $LO
下午好,
我有一个小的Perl脚本,它基本上模拟了Minecraft server.log上的tail -f功能.该脚本检查某些字符串并以各种方式执行操作. 该脚本的简化版本如下: #!/usr/bin/perl use 5.010; use warnings; use strict; my $log = "PATH TO LOG"; my $curpos; open(my $LOGFILE,$log) or die "Cannot open log file"; # SEEK TO EOF seek($LOGFILE,2); for (;;){ my $line = undef; seek($LOGFILE,1); ### clear OF condition for($curpos = tell($LOGFILE); <$LOGFILE>; $curpos = tell($LOGFILE)){ $line = "$_ n"; if($line =~ /test string/i){ say "Found test string!"; } } sleep 1; seek($LOGFILE,$curpos,0); ### Setting cursor at the EOF } 当我有一个测试服务器时,一切似乎工作正常.在生产中,server.log文件被轮换.当日志轮换时,脚本会保留原始文件,而不是替换它的文件. 如何调整我的脚本来监视文件名“server.log”,而不是当前名为“server.log”的文件? 解决方法
您是否考虑过使用tail -F作为脚本的输入:
tail -F server.log 2>/dev/null | perl -nE 'say if /match/' 这将观察命名文件,将每一行传递给STDIN上的脚本.它将只正确跟踪server.log,如下所示: echo 'match' >server.log (由脚本匹配) mv server.log server.log.old echo 'match' >server.log (也匹配) 您可以使用以下命令在Perl中打开尾部-F作为文件: open(my $fh,'-|','tail -F server.log 2>/dev/null') or die "$!n"; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |