EHLO!
这开始就像一个"嘿,给我30分钟"但是我在这里过了一天。 基本上我想做的是检查" / var / log / messages"持续30秒,当有人在此期间插入USB硬盘时,执行一些命令。
所以我正在使用Per功能" File :: Tail",有点工作,但我不知道如何运行它只有30秒,尾巴停留在那里直到我手动退出( 它就像tail命令一样工作。我一直在寻找使用fork的解决方案,但仍然没有运气或经验。部分"尾巴"代码是这样的:
while ((defined($line=$file->read)) ) {
我感谢任何帮助或提示。如果有人有另一个解决方案使用另一个,功能或什么,它没关系,我需要一个" CGI"的代码。
答案 0 :(得分:1)
您可以使用File::Tail::select()实现此目的。
下面的示例将一秒钟的有尾文件放入@pending
数组中,然后进行处理。循环30次将使您非常接近30秒(取决于您的/ var / log / messages的活动程度)。如果您需要更精确的计时,可以在循环之前存储时间并比较每次迭代的时间。
use File::Tail;
$file = File::Tail->new(name=>"/var/log/messages", interval=>1);
TIMER_LOOP:
while($t++ < 30){
(undef,undef,@pending)=File::Tail::select(undef,undef,undef, 1, $file);
for(@pending){
if($_->read =~ /New USB device found/){
print "Hello USB!\n";
last TIMER_LOOP;
}
}
}