簡體   English   中英

Perl無法尾部旋轉日志文件

[英]Perl not able to tail rotated log file

我正在使用基於屬性的rsyslog過濾器將特定日志發送到單獨的文件,在這些文件中將使用perl解析這些日志。

這是我的rsyslog條目

$template SPLIT,"/home/shivam/hello-%$YEAR%%$MONTH%%$DAY%%$HOUR%%$MINUTE%"
:msg, contains, "hello" -?SPLIT

因此,rsyslog將為每分鍾之后出現的日志創建單獨的文件。 文件將被創建為hello-201505281139

我解析這些文件的Perl腳本是

use strict;
use warnings;
use POSIX qw(strftime);

my $date = strftime "%Y%m%d%H%M", localtime;
my $file = '/root/defer-'.$date;
open(my $fh,'<',$file) or die "unable to open file $!\n";

while(1) {
    while(my $line = <$fh>){
                    print "$date\n";
                    print "$line";
            }
    sleep(2);
    unless ($date == strftime "%Y%m%d%H%M", localtime) {
            close($fh);
            $date = strftime "%Y%m%d%H%M", localtime;
            $file = '/root/defer-'. $date;
            system("touch $file");      
            open(my $fh,'<',$file) or die "unable to open file $!\n";

    }
}

在除非塊中,否則我正在檢查分鍾是否已更改,然后我關閉上一個文件並打開新文件。 我從腳本創建新文件而不等待rsyslog創建文件的原因是日志的出現頻率不是那么高。 因此,我創建了文件並開始閱讀它,希望當任何新日志出現時我都能閱讀。

但是正在發生的事情是我能夠創建新文件,但無法從該文件讀取任何內容。

這就是我得到的警告

readline() on closed filehandle $fh at test.pl line 14.

我的代碼中的第14行是while(my $line = <$fh>){

我在代碼中看不到任何錯誤。 請提出錯誤所在。

您有兩個不同的$fh詞法(我)變量,

所以改為聲明一個新的

open(my $fh,'<',$file) or die "unable to open file $!\n";

繼續使用先前聲明的

open($fh,'<',$file) or die "unable to open file $!\n";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM