[英]tail a file in perl with PID
我需要检查日志文件,直到在Perl中PID仍然存在为止。 它在bash中工作正常。
tail -f --pid=1234 logfile.log
现在,我需要通过检查PID或给定时间间隔来对perl进行检查日志文件,这同样适用于我。
我正在Perl中使用以下代码来执行此操作,但是我能够拖尾一个文件并且其中有两个问题。
1)文件尾没有立即发生。
2)我想在几秒钟后闭合尾巴,例如100。
use warnings;
use strict;
use File::Tail;
my $name='/tmp/out';
my $file=File::Tail->new(name=>$name,interval=>1,maxinterval=>5,adjustafter=>1);
my ($found,$timeleft,@pending) = File::Tail::select(undef,undef,undef,100,$file);
if ($found)
{
print $pending[0]->read;
}
我正在使用上面的代码,它仅在2秒钟内退出。 我正在寻找在给定时间后像Linux中的tailf命令一样拖尾文件以退出。
谢谢。
从文档中 :
该模块非常努力地不对流量很少的文件“忙碌等待”。 每当它从文件中读取新数据时,它都会计算新行数,并将该数除以自从数据最后一次写入文件之前经过的时间。 这被认为是新数据写入之前的平均时间。 当没有新的数据要读取时,File :: Tail睡眠该秒数。 此后,动态重新计算等待时间。 请注意,File :: Tail的休眠时间不会超过maxinterval设置的秒数。
因此,如果您希望maxinterval
立即查看更新,则需要将其设置为一个maxinterval
的数字。
更新:要超时,请使用select
。 这个简单的示例对文件进行了一次100秒的检查。 它还至少每五秒钟检查一次文件。 有关使用循环的更复杂示例,请参见上述文档。
use warnings;
use strict;
use File::Tail;
my $name='/tmp/out';
my $file=File::Tail->new(name=>$name,interval=>1,maxinterval=>5,adjustafter=>1);
my ($found,$timeleft,@pending) = File::Tail::select(undef,undef,undef,100,$file);
if ($found)
{
print $pending[0]->read;
}
更新:这是一个循环解决方案,将在您的整个时间间隔内持续进行:
use warnings;
use strict;
use File::Tail;
my $name='/tmp/out';
my $file=File::Tail->new(name=>$name,interval=>1,maxinterval=>5,adjustafter=>1);
my $time = 60;
while ($time > 0)
{
my ($found,@pending);
($found,$time,@pending) = File::Tail::select(undef,undef,undef,$time,$file);
if ($found)
{
print $_->read for @pending;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.