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.