こんにちは、
tail -f
基本的に Minecraft の server.logの機能をエミュレートした小さな Perl スクリプトがあります。スクリプトは特定の文字列をチェックし、さまざまな方法で動作します。
スクリプトの簡略版は次のとおりです。
#!/usr/bin/perl
use 5.010;
use warnings;
use strict;
my $log = "PATH TO LOG";
my $curpos;
open(my $LOGFILE, $log) or die "Cannot open log file";
# SEEK TO EOF
seek($LOGFILE, 0, 2);
for (;;){
my $line = undef;
seek($LOGFILE,0,1); ### clear OF condition
for($curpos = tell($LOGFILE); <$LOGFILE>; $curpos = tell($LOGFILE)){
$line = "$_ \n";
if($line =~ /test string/i){
say "Found test string!";
}
}
sleep 1;
seek($LOGFILE,$curpos,0); ### Setting cursor at the EOF
}
テストサーバーを立ち上げたところ、すべてが正常に機能しているように見えました。本番環境では、server.log ファイルがローテーションされます。ログがローテーションされると、スクリプトは元のファイルを保持し、それを置き換えるファイルは保持しません。つまり、server.log が監視され、server.log が移動され、logs/date_x.log.gz に圧縮されます。server.log は新しいファイルになります。
現在「server.log」と呼ばれているファイルではなく、ファイル名「server.log」を監視するようにスクリプトを変更するにはどうすればよいですか?