Alternative für "tail -f", die dem Dateinamen folgt

59

Ich habe einige Protokolle, die mit einem zeitgesteuerten rotierenden Datei-Logger erstellt werden. Dies protokolliert in eine Datei mit dem Namen tool.logund verschiebt diese um Mitternacht nach tool.log.<date>und startet eine neue tool.log.

Ich habe einen tail -f tool.logLauf auf dem Computer, um die Protokolle im Auge zu behalten, aber um Mitternacht, wenn tool.login umbenannt wird, tool.log.<date>wird taildie umbenannte Datei weiterhin überwacht.

Was ich mir erhoffe, ist ein Tool, taildas der genannten Datei ähnelt , sie jedoch weiterhin überwacht tool.log, anstatt der Inode zu folgen.

Gibt es so etwas? Wenn nicht, kann ich zu diesem Zweck mein eigenes in Python schreiben.

Hugh
quelle

Antworten:

90

Einige Implementierungen von tailhaben hierfür eine Option. Hier ist die Beschreibung von der Manpage für GNU Tail:

-F
gleich wie --follow=name --retry

-f, --follow[ ={ name | Deskriptor }] gibt
angehängte Daten aus, wenn die Datei wächst; -f,, --followund --follow=descriptorsind gleichwertig

--retry
Versuchen Sie weiterhin, eine Datei zu öffnen, auch wenn darauf nicht mehr zugegriffen werden kann. nützlich, wenn Sie dem Namen folgen, dh mit--follow=name

Da diese Option von POSIX nicht angegeben wird, können Sie sich nicht überall darauf verlassen. Einige bekannte Implementierungen:

  • GNU - hat-Fwie oben beschrieben
  • Mac OS X , FreeBSD und NetBSD - haben eine ähnliche-FOption mit dem gleichen Effekt
  • OpenBSD --freicht aus (wenn die Datei ersetzt wird (dh wenn sich die Inode-Nummer ändert), öffnet tail die Datei erneut und fährt fort)
  • Solaris - kein Äquivalent
  • Busybox --Fist in neueren Versionen verfügbar, muss aber mit kompiliert werdenENABLE_FEATURE_FANCY_TAIL(standardmäßig nicht kompiliert)
Toby Speight
quelle
55

Alternative ist tail -FBefehl.

Die -FOption impliziert --follow=namemit der --retryOption, sodass tail Ihre Datei überwacht, auch wenn sie gelöscht und neu erstellt wurde.

Oleg Bolden
quelle
5

Da Sie nach einer Alternative gefragt haben :

Das lessDienstprogramm könnte eine Alternative für sein tail -F.

Es muss wie folgt ausgeführt werden: less --follow-name filename.logund drücken Sie Shift+ F.

Dies führt zu den gleichen Ergebnissen wie tail -F.

VL-80
quelle
Vielen Dank. Ich war erst nach einer Alternative, weil ich von Schwanz-F nichts mitbekam. Immer gut zu Optionen zu kennen.
Hugh
4

Eine andere Alternative wäre die Verwendung des watchBefehls, der jeden Befehl alle n Sekunden, in diesem Beispiel alle 2 Sekunden, wiederholt:

watch -n2 "tail tool.log"

Verwenden Sie Ctrl+ C, um den Befehl zu beenden, wenn Sie mit dem Anzeigen des Protokolls fertig sind.

Arronisch
quelle
1
Dies scheint, als würde es eine Menge doppelter Nachrichten erzeugen, wenn das Protokoll langsamer als der Aktualisierungs-Timer gescrollt wird, und es würde einige Nachrichten verpassen, wenn es schneller gescrollt wird.
Bobson
3
Watch nimmt den gesamten Bildschirm ein, sodass Nachrichten nicht dupliziert werden, aber die Möglichkeit zum Zurückblättern entfällt.
Hugh
3

lnav ist ein weiteres fantastisches Tool, das dem Dateinamen folgt.

Sie können es auch auf ein Verzeichnis verweisen, um alle Dateien in diesem Verzeichnis sowie alle anderen netten Funktionen anzuzeigen.

Wayne Werner
quelle
Ich habe festgestellt, dass gekürzte und / oder umbenannte gedrehte Protokolle nicht verarbeitet werden (ich bin nicht sicher, was es in meinem speziellen Fall stört), sodass die Protokolle anscheinend um Mitternacht angehalten werden, es sei denn, ich starte lnav neu. Fehlt mir ein offensichtlicher Schalter oder eine offensichtliche Technik dafür?
Stuart Hickinbottom
Dies hängt davon ab, wie die Datei abgeschnitten wird. Wenn Sie das -rFlag an lnav übergeben, wird der Dateiname neu geladen (und alle zuvor ausgelagerten Protokolle werden geladen)
Wayne Werner
1

Ich bin mir nicht sicher, ob ich mich multitailum Ihren speziellen Fall kümmern werde, aber ich wette, es ist der Fall. Multitail macht so ziemlich alles, was Sie wollen könnten tail.

https://en.wikipedia.org/wiki/MultiTail

Andy Lester
quelle
1
Ja, es wird - multitail -f <name1> -f <name2> -f <name3> .... In diesem Beispiel werden mehrere Dateien gleichzeitig verfolgt, die in separaten Fenstern angezeigt werden.
Stuart Hickinbottom