PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Logfiles Überwachen (mit script die Größe überwachen)



meinereinerseiner
08-03-2002, 09:01
Hi,

ich hab da mal wieder so einen frage:

wie kann ich mit einem Shellscript ein logfile überwachen?
Hintergrund ist, ich habe hier ein Programm welches mal ab und zu stehen bleibt, aber sich am prozessstatus nix ändert, da es aber normalerweise regelmäßig ins log schreibt, dachte ich an ein script, was die größe
des logfiles in def. zeitabständen erfasst und das mit seinem
vorhergehenden Ergebnis vergleicht - wenn sich der wert nicht ändert, soll eine FM erzeugt werden.

Nun Mein Problem, wie bekomme ich die Dateigröße eines Files in eine
Variable und wie vergleiche ich die dann - als string oder wandel ich das
ganze in eine Zahl um und wenn ja wie?



der tom

mightymike99
08-03-2002, 13:19
Du kannst auch direkt schaun ob dein Prozess noch da ist:

mit
ps ax | grep deinprozessname

Zur Dateigroesse

dateigroesse=$(ls -l deinedatei | awk '{print $5}')

Vergleich:
if [ $dateigroesse -eq $dateigroesse2 ]
then ...
fi

meinereinerseiner
08-03-2002, 15:27
Danke,

zu der sache, den status des prozesses direkt abfragen, genau das
ist das problem, der prozess an sich "lebt" noch, auch wenn das programm nix mehr tut - deswegen die variante mit den logfiles.

der tom

Sion
10-03-2002, 17:25
Original geschrieben von meinereinerseiner
Danke,

zu der sache, den status des prozesses direkt abfragen, genau das
ist das problem, der prozess an sich "lebt" noch, auch wenn das programm nix mehr tut - deswegen die variante mit den logfiles.

der tom

Du kannst ja ein kleines Script schreiben, welches die Log-Datei öffnet, an den Schluß springt ("seek LOGFILE, 0, 2") und dann in einer while-Schleife Zeilen einließt. Kommen für z.B. 5 Minuten keine neuen Daten, wird ein Timeout ausgelöst und das Script handelt entsprechend.
In Perl sieht das in etwa so aus:

while (1)
{
alarm (300); #300Sekunden (5Minuten)
$zeile = <LOGFILE>;
}

Dazu noch den Alarm-Handler installieren:
$SIG{ALRM} = sub {print "Prozess hängt!\n";};

Hab das jetzt nicht mehr alles genau im Kopf, könnte aber nachsehen wenn's dich noch interessiert. Mit einem Select wäre die Sache übrigens noch etwas "cooler", aber das habe ich wirklich nicht mehr im Kopf.

Gruß, Sion