"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Tail -F > OUTPUT problem

ColdFire 15.01.2010 - 14:44 1092 9
Posts

ColdFire

Addicted
Avatar
Registered: Feb 2005
Location: OÖ / Linz
Posts: 360
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

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Das ist aus diversen Gruenden nicht so einfach.

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

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Zitat von ColdFire
Leider funktioniert das nicht so ganz
Und wodurch äußert sich das?

ColdFire

Addicted
Avatar
Registered: Feb 2005
Location: OÖ / Linz
Posts: 360
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

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
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

Addicted
Avatar
Registered: Feb 2005
Location: OÖ / Linz
Posts: 360
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

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
D. h. das bisherige, "volle" Logfile wir umbenannt, und ein neues (mit dem alten Namen des nun abgeloesten Logfiles) wird erstellt?

ColdFire

Addicted
Avatar
Registered: Feb 2005
Location: OÖ / Linz
Posts: 360
Richtig. So wie es eben bei logfiles so üblich ist.

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3232
und wieso nicht logrotate einsetzen?

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
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`
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz