2016-04-07 6 views
0

Ich bin eigentlich ein Verzeichnis für die Erstellung neuer Dateien (LOG-Dateien) überwachen diese Dateien werden von einigen Werkzeug und Werkzeug geschrieben Protokolleinträge nach irgendwann der generiert Erstellung der gleichen Datei, Während dieser Zeit wird die Datei leer sein.Wie kann ich warten, bis etwas in die Protokolldatei in meinem Perl-Skript geschrieben wird

und wie kann ich warten, bis etwas in das Protokoll geschrieben wird und Grund auf den Log-Einträgen basieren werde ich verschiedene Skript wird Aufruf !,

use strict; 
use warnings; 
use File::Monitor; 
use File::Basename; 
my $script1 = "~/Desktop/parser1.pl"; 
my $scrip2t = "~/Desktop/parser2.pl"; 
my $dir = "~/Desktop/tool/logs"; 
sub textfile_notifier { 
my ($watch_name, $event, $change) = @_; 

my @new_file_paths = $change->files_created; #The change object has a property called files_created, 
              #which contains the names of any new files 
for my $path (@new_file_paths) { 
    my ($base, $fname, $ext) = fileparse($path, '.log'); # $ext is "" if the '.log' extension is 
                 # not found, otherwise it's '.log'. 
    if ($ext eq '.log') { 
     print "$path was created\n"; 
     if(-z $path){ 
     # i need to wait until something is written to log 
     }else{ 
     my @arrr = `head -30 $path`; 
     foreach(@arr){ 
     if(/Tool1/){ 
      system("/usr/bin/perl $script1 $path \&"); 
     }elsif(/Tool1/){ 
     system("/usr/bin/perl $script2 $path \&"); 
     } 
    } 
} 
} 
my $monitor = File::Monitor->new(); 
$monitor->watch({ 
name  => $dir, 
recurse  => 1, 
callback => {files_created => \&textfile_notifier}, #event => handler 
}); 
$monitor->scan; 

while(1){ 
    $monitor->scan; 
} 

Grundsätzlich i von den einige der wichtigen Informationen am greppen Protokolle.

+0

Haben Sie etwas über Polling ein Datei-Handles lesen? – red0ct

+0

@ red0ct Nein! ein Link zu solchen Informationen wird hilfreich – Shantesh

+1

Könnte [File :: Monitor] (http://search.cpan.org/~andya/File-Monitor-1.00/lib/File/Monitor.pm) eine sinnvolle Option sein? – eballes

Antwort

0

Sie überwachen nur die Protokolldateierstellung. Vielleicht könnten Sie eine Sleep-Funktion innerhalb des Call-Back-Sub verwenden, um auf das Schreiben der Log-Datei zu warten. Sie könnten auch Dateiänderungen überwachen, da einige Protokolldateien erweitert werden könnten.

3

Für eine solche Formulierung Ihrer Frage, so etwas wie dies könnte Ihnen helfen:

use File::Tail; 
# for log file $logname 
my @logdata; 
my $file = File::Tail->new(name => $logname, maxinterval => 1); 
while (defined(my $newline = $file->read)) { 
    push @logdata, $newline; 
    # the decision to launch the script according to data in @logdata 
} 

Lesen Sie mehr here

Verwandte Themen