Tail -F > OUTPUT problem

Seite 1 von 1 - Forum: Windows auf overclockers.at

URL: https://www.overclockers.at/windows/tail_f_output_problem_213460/page_1 - zur Vollversion wechseln!


ColdFire schrieb am 15.01.2010 um 14:44

Liebe linux gurus.

Ich möchte ein laufendes DEBUG file das sich ab einer gewissen filesize ersetzt in eine datei schreiben.

Eigentlich kein problem.

Code:
tail -F lalaal.dbg | grep -i "MEINE INFORMATION" 
funktioniert wunderbar.

Nun möchte ich den output umleiten in meine textdatei
Code:
tail -F lalaal.dbg | grep -i "MEINE INFORMATION" | tee neueslog.txt
Leider funktioniert das nicht so ganz

Code:
tail -F lalaal.dbg | grep -i "MEINE INFORMATION" >> neueslog.txt
Auch mit diesem befehl nicht.

tail -F same as --follow=name --retry

Hat jemand eine Idee wie ich das machen kann. Wichtig ist das sich das logfile ersetzt ab einer gewissen filesize und somit der stream auch weg ist.

Plz help. ColdFire


COLOSSUS schrieb am 15.01.2010 um 15:01

Das ist aus diversen Gruenden nicht so einfach.

Zuallererst muss ich aber fragen: wer/was schreibt denn urspruenglich in lalaal.dbg?


Ringding schrieb am 15.01.2010 um 15:25

Zitat von ColdFire
Leider funktioniert das nicht so ganz
Und wodurch äußert sich das?


ColdFire schrieb am 15.01.2010 um 15:52

Zitat von COLOSSUS
wer/was schreibt denn urspruenglich in lalaal.dbg?
Ein Java programm schreibt den output auf den das ich leider keinen zugriff habe.

zur frage warum es nicht funktioniert.

Wenn ich den tail laufen lasse ohne den output zu schreiben sehe ich das ich information bekomme.

Wenn ich ein wc -l output.txt bekomme ich als result 0

lg CF


COLOSSUS schrieb am 15.01.2010 um 20:11

Dein Java-Programm erkennt also selbsttaetig, dass N bytes geschrieben wurden (und erachtet diese Menge als zu viel fuer ein File), und erstellt dann ein weiteres Logfile (das das alte ersetzt), und schreibt in dieses weiter, waehrend es das alte File loescht?


ColdFire schrieb am 16.01.2010 um 10:47

Nicht ganz. Also die routine schaut ca so aus wenn die byteanz erreicht wird aus zb log1.dbg -- > log2.dbg und legt einen neue log1.dbg an.

lg CF


COLOSSUS schrieb am 16.01.2010 um 16:41

D. h. das bisherige, "volle" Logfile wir umbenannt, und ein neues (mit dem alten Namen des nun abgeloesten Logfiles) wird erstellt?


ColdFire schrieb am 18.01.2010 um 08:27

Richtig. So wie es eben bei logfiles so üblich ist.


Neo-=IuE=- schrieb am 18.01.2010 um 08:48

und wieso nicht logrotate einsetzen?


COLOSSUS schrieb am 18.01.2010 um 10:10

Weil das Rotieren von der Java-Anwendung selbst uebernommen wird. ColdFire geht es aber darum, gewisse Informationen aus diesen Logfiles zu gewinnen, und diese irgendwohin (in eine andere Datei) zu exportieren.

Es ist nicht ganz trivial, das elegant zu loesen - Programme, die kein syslog() nutzen, wuerde ich persoenlich meiden, wenn es denn geht. Selber Logfiles schreiben ist einfach out. Der Linux-Kernel bietet allerdings einen eleganten Mechanismus, wie man da trotzdem was machen kann: inotify.

Mit inotify kannst du auf einem Directory Inode sog. "Watches" einrichten, die dir gewisse Events in diesem Directory (und wahlweise auch Directories darunter) melden. Solche Events beinhalten z. B. "Neue Datei wurde angelegt" bzw. "Datei wurde geloescht". Auch "rename" kann man tracken. Auf diese Events kannst du dann reagieren - mit Python geht das z. B. sehr komfortabel, aber auch auf der Shell ist das mit den inotify-tools moeglich.

Ich wuerde mir an deiner Stelle also ein kleines Programm schreiben, das das Logfile-Output-Directory mit entsprechenden Watches ausstattet, das gerade aktuelle Logfile nach deinen Wuenschen filtert und die Ausgabe irgendwohin umlenkt, und beim Auftauchen eines neuen Logfiles auf dieses "umschaltet" (und den alten fd schlieszt). Sollte in weniger als 30 Zeilen Python machbar sein, schaetze ich.

→ `man inotify`




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026