URL: https://www.overclockers.at/windows/tail_f_output_problem_213460/page_1 - zur Vollversion wechseln!
Liebe linux gurus.
Ich möchte ein laufendes DEBUG file das sich ab einer gewissen filesize ersetzt in eine datei schreiben.
Eigentlich kein problem.
funktioniert wunderbar.Code:tail -F lalaal.dbg | grep -i "MEINE INFORMATION"
Leider funktioniert das nicht so ganzCode:tail -F lalaal.dbg | grep -i "MEINE INFORMATION" | tee neueslog.txt
Auch mit diesem befehl nicht.Code:tail -F lalaal.dbg | grep -i "MEINE INFORMATION" >> neueslog.txt
Das ist aus diversen Gruenden nicht so einfach.
Zuallererst muss ich aber fragen: wer/was schreibt denn urspruenglich in lalaal.dbg?
Und wodurch äußert sich das?Zitat von ColdFireLeider funktioniert das nicht so ganz
Ein Java programm schreibt den output auf den das ich leider keinen zugriff habe.Zitat von COLOSSUSwer/was schreibt denn urspruenglich in lalaal.dbg?
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?
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
D. h. das bisherige, "volle" Logfile wir umbenannt, und ein neues (mit dem alten Namen des nun abgeloesten Logfiles) wird erstellt?
Richtig. So wie es eben bei logfiles so üblich ist.
und wieso nicht logrotate einsetzen?
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