[英]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.