Perl尾文件30秒

时间:2016-10-16 01:54:11

标签: perl usb detect tail plug-and-play

EHLO!

这开始就像一个"嘿,给我30分钟"但是我在这里过了一天。 基本上我想做的是检查" / var / log / messages"持续30秒,当有人在此期间插入USB硬盘时,执行一些命令。

所以我正在使用Per功能" File :: Tail",有点工作,但我不知道如何运行它只有30秒,尾巴停留在那里直到我手动退出( 它就像tail命令一样工作。我一直在寻找使用fork的解决方案,但仍然没有运气或经验。部分"尾巴"代码是这样的:

while ((defined($line=$file->read)) ) {

我感谢任何帮助或提示。如果有人有另一个解决方案使用另一个,功能或什么,它没关系,我需要一个" CGI"的代码。

1 个答案:

答案 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;
        }
    }
}