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

5327
Hugh

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

Ich habe ein tail -f tool.loglaufendes Programm, um die Protokolle im Auge zu behalten, aber um Mitternacht, wenn tool.logumbenannt wird, tool.log.<date>wird taildie umbenannte Datei weiterhin angezeigt.

Ich hoffe auf ein Werkzeug, das ähnlich ist tail, aber die benannte Datei weiterhin überwacht tool.log, anstatt dem Inode zu folgen.

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

59

6 Antworten auf die Frage

90
Toby Speight

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 auf sie nicht zugegriffen werden kann oder wird. nützlich, wenn Sie mit dem Namen folgen, dh mit--follow=name

Da diese Option nicht von POSIX 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 die Inode-Nummer ändert sich), öffnet tail die Datei erneut und fährt fort)
  • Solaris - keine Entsprechung
  • Busybox --Fist in neueren Versionen verfügbar, muss aber mit kompiliert werdenENABLE_FEATURE_FANCY_TAIL(standardmäßig nicht kompiliert)
55
Oleg Bolden

Alternative ist tail -FBefehl.

Die -FOption impliziert eine Option --follow=namemit --retryOption. Daher überwacht tail Ihre Datei, auch wenn sie gelöscht und erneut erstellt wurde.

4
Arronical

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

watch -n2 "tail tool.log" 

Verwenden Sie Ctrl+ C, um den Befehl zu beenden, wenn Sie das Protokoll vollständig angezeigt haben.

Es scheint, als würde dies zu einer großen Anzahl von doppelten Nachrichten führen, wenn das Protokoll langsamer als der Aktualisierungszeitgeber gescrollt wurde, und einige Nachrichten würden fehlen, wenn es schneller gescrollt werden würde. Bobson vor 8 Jahren 1
Watch übernimmt den gesamten Bildschirm, sodass Nachrichten nicht dupliziert werden, aber die Möglichkeit zum Zurückblättern entfällt. Hugh vor 8 Jahren 3
3
Wayne Werner

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

Sie können es auch auf ein Verzeichnis verweisen, und es werden alle Dateien in diesem Verzeichnis zusätzlich zu allen anderen ordentlichen Funktionen eingebunden.

Ich habe festgestellt, dass es nicht mit abgeschnittenen und / oder umbenannten gedrehten Protokollen umgehen kann (ich bin mir nicht sicher, was sie in meinem speziellen Fall stört). Die Protokolle scheinen also um Mitternacht zu stoppen, wenn ich nicht lnav neu starte. Fehlt mir ein offensichtlicher Schalter oder eine offensichtliche Technik? Ich frage mich, wie es scheint, als würde es etwas bewirken, was es braucht. Stuart Hickinbottom vor 7 Jahren 0
Es hängt davon ab, wie die Datei abgeschnitten wird. Wenn Sie das `-r`-Flag an lnav übergeben, wird der Dateiname neu geladen (und alle zuvor herausgezogenen Protokolle werden geladen). Wayne Werner vor 7 Jahren 0
3
VL-80

Da haben Sie nach Alternative gefragt :

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

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

Dadurch erhalten Sie dieselben Ergebnisse wie tail -F.

Vielen Dank. Ich war nur auf der Suche nach einer Alternative, weil ich den Schwanz -F nicht kannte. Immer gut zu wissen, Optionen. Hugh vor 8 Jahren 0
1
Andy Lester

Ich bin mir nicht sicher, ob er multitailmit Ihrem speziellen Fall umgehen wird, aber ich wette, das tut es. Multitail macht so ziemlich alles, was Sie wollen tail.

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

Ja, es wird - Multitail -f -f -f ... In diesem Beispiel werden mehrere Dateien gleichzeitig angezeigt, die in separaten Fenstern angezeigt werden. Stuart Hickinbottom vor 7 Jahren 1