Hin und wieder möchte man Log-Dateien unter Linux beobachten weil etwas nicht richtig funktioniert, oft greift man hier auf tail zurück um die letzten Zeilen anzuschauen. Dann startet man eine Aktion die den Fehler auslöst, führt wieder tail aus und kommt früher oder später durcheinander weil der ganze Zeilenspeicher der Konsole vollläuft mit Dingen die alle gleich aussehen.
Neulich bin ich dann über das Tool watch gestolpert. Dieses führt einen Befehl ständig wieder aus, und ermöglicht zusammen mit tail so das kontinuierliche Überwachen einer Log-Datei.
Das ganze kann dann beispielsweise so aussehen:
1 | watch 'tail -n 20 /var/log/mail.log' |
Dann wird alle 2 Sekunden die Ausgabe von tail angezeigt. Zu beachten ist die Verwendung von ‚ ‚ um den eigentlichen Befehl, es ist nicht zwingend notwendig, aber wenn man beispielsweise einen Befehl durch eine Pipe in grep schickt und die Ausgabe von grep sehen will, so müssen die Anführungszeichen verwendet werden, da sonst die Ausgabe von watch in grep landet.
Kommandozeilenparameter für watch:
- -n Zahl Intervall in dem der Befehl ausgeführt wird in Sekunden (3600s=1 Stunde)
- -d[=cumulative] Unterschiede anzeigen [Unterschiede werden für immer angezeigt]
- -b ein Warnbiep wird abgespielt wenn der Befehl mit einem Fehler beendet wurde (Exitcode ungleich 0)
Alternativ kann auch die Funktionalität von tail direkt benutzt werden, wie Thomas richtig in den Kommentaren anmerkt:
1 | tail -n 20 -F -s 2 /var/log/mail.log |
Kommandozeilenparameter für tail:
- -n Zahl Anzahl der Zeilen die am Anfang ausgegeben werden (vom Ende der Datei)
- -F Follow – bewirkt dass dem Ende der Datei gefolgt wird, sobald also etwas angehängt wird wird es ausgegeben
- -s Zahl Es wird zwischen den einzelnen Ausgaben in etwa Zahl Sekunden gewartet
Der Unterschied bei dieser Variante ist, dass die Ausgabe immer weiter erfolgt, das Terminal also immer weiter vollgeschrieben wird. Das kann erwünscht sein oder auch nicht.
Solange die Logdatei am Ende anwächst (was die meisten Logdateien tun), dann genügt doch ein
, oder? Mit dem zusätzlichen Parameter -s kann auch noch geschlafen werden, falls das wichtig sein sollte.
Da ist was dran, ich hätte mir die manpage zu tail wohl genauer anschauen sollen. Wobei die watch Variante immernoch den Vorteil bietet, dass der Puffer des Konsolenfensters nicht vollgeschrieben wird.
Moin
watch in Kombination ist echt praktisch, z.B. aauch um bestimmte Daten aus logfiles in Dateien umzulenken, was bei mir mot tail -f nicht funktioniert hat. 🙂
Danke für den Hinweis, das muss ich auch mal ausprobieren.
Hallo, ich hoffe ihr könnt mir helfen.
ich lasse mir verschiedene Logs anzeigen, diese werden dann auch gespeichert.
Das passiert mitdem alias Logs, dieser beinhaltet :
tail-f /date/…/…log
Das klappt auch gut.
Nun möchte ich aber, dass er mir immer wenn das Wort „err-disable“ erscheint, dieses Farbig darstellt.
Ich dachte mit tail-f /date/…/…log | grep –colour „err-disable“ könnte das klappen. funzt aber nicht, da er mir nun nichts mehr anzeigt. EVTL würde er mir err-disable anzeigen, kommt aber nicht so oft vor.
Bei grep hast du das Problem, dass es einfach alles wegschmeißt, was nicht passt.
Es gibt hier eine Beschreibung wie man es mit sed, awk oder multitail hinbekommt:
https://unix.stackexchange.com/questions/8414/how-to-have-tail-f-show-colored-output
Falls du Schwierigkeiten mit dem Englisch hast, kann ich die Antwort auch für dich übersetzen.
Vielen dank, ich werde es mal versuchen. Sollte ich noch fragen haben, würde ich mich noch mal bei dir melden.