watchdog- Script für logfile
|
Seitenanfang |
Hi Leutz, ich möchte ein Logfile periodisch nach Pattern durchsuchen und bei Vorhandensein dieses Pattern ein Systemaufruf starten (Durchstarten Webserver). Da theoretisch der zu suchende String mehrmals vorkommen kann, möchte ich jeweils das letzte Vorkommen berücksichtigen. Meine Idee war nun die Zeilenanzahl in ein File zu schreiben (LAST_ROW) und beim nächsten Start ab dieser Zeile das Logfile einzulesen (weblogic.log). Geht das?? - ich hab dazu keine Funktion gefunden.
open(ERROR,'...\weblogic.log'); @lines=<ERROR>; foreach $title (@lines) { print "$title\n"; } close(ERROR); open(OUTPUT1,'>...\watchdog\LAST_ROW'); print OUTPUT1 "$#lines\n"; close(OUTPUT1); ... lies beim nächsten Lauf ab Zeile LAST_ROW die Datei weblogic.log ein.
Eine Variante mit tail gefällt mir nicht so richtig, da hier nur eine gewisse Anzahl an Zeilen berücksichtigt wird und das Script ständig im Hintergrund laufen müsste- Oder sehe ich das falsch?
use strict; local $| = 1; #Autoflush true my $file = '....weblogic.log'; die "tail nicht installiert\n" unless qx/which tail/; open(TAIL,"tail -f $file |") or die $!; while(my $line = <TAIL>){ print "$.: $line\n"; print "Gefunden\n" if $line =~ m/PATTERN/; } close TAIL; # schließe die Pipe
Datum: 11.02.2005-11:30

|
re: watchdog- Script für logfile
|
Seitenanfang |
| speicher nicht die Zeile in der Du warst, sondern die Byte-Position, denn dann kannst Du mit seek (siehe perldoc -f seek) arbeiten...
Datum: 11.02.2005-13:36

|
re: watchdog- Script für logfile
|
Seitenanfang |
Hi renee, danke erstmal für die Antwort. Mit seek habe ich wg. diesem Problem schon experimentiert. Nun habe ich aber das Problem den Rest der Datei ab der gespeicherten Byte- Position einzulesen. Muss ich hier read verwenden?? Sorry, ich komme da an dieser Stelle nicht weiter, da Perlneuling.
Datum: 11.02.2005-15:46

|
re: watchdog- Script für logfile
|
Seitenanfang |
#!/usr/bin/perl use warnings; use strict; # ... DATA schon zum lesen geoeffnent # aktuelle Offset = 0 # lese die ersten 5 Zeilen und gib sie aus print scalar <DATA> for 1..5; # speichere aktuellen Offset my $last_position = tell(DATA); close(DATA); print "-- MARK --\n"; open(DATA, '<', $0) or die $!; seek(DATA, $last_position, 0) or die "can't seek\n"; print for <DATA>; close(DATA); __DATA__ Zeile1 Zeile2 Zeile3 Zeile4 Zeile5 Zeile6 Zeile7 Zeile8
Grusz Christian.
Datum: 16.02.2005-22:53

|
re: watchdog- Script für logfile
|
Seitenanfang |
Hi Christian, danke für Dein Update .. genau das war es was ich gesucht habe! danke,danke,danke
Datum: 23.02.2005-10:01

|