Ich habe eine Software, die ihre Protokolldateien beim Neustart rotiert. Während der Entwicklung starte ich sie jedoch häufig neu, sodass ich jederzeit die neueste Protokolldatei überwachen möchte.
Wenn ich less
normal beginne less program.log
und Shift+ fdrücke, um das Ende zu markieren, kontrolliere ich weiterhin die alte Protokolldatei, wenn die Protokolldatei rotiert wird. Ich gehe davon aus, dass dies daran liegt, dass die Inode-Nummer gleich bleibt und less
ein offener Datei-Handle für diesen Inode vorhanden ist.
Ist es möglich, die neueste Aktivität in der aktuell aufgerufenen Protokolldatei zu überwachen program.log
?
Insbesondere arbeite ich unter Sun OS, daher wäre eine Lösung, die dort funktioniert, ideal.
Antwort1
Verwenden Sie es less --follow-name
, wenn Ihre Version less
es unterstützt.
Diese Option wurde in Version 416 eingeführt.
Shift+FFühren Sie dann innerhalb einen normalen Folgebefehl aus less
.
Antwort2
Die less
Option --follow-name
ist nur ein Teil der Lösung.
Um zu ersetzen tail -F
, wird ein weiteres Argument benötigt:
less --follow-name +F file.log
Die Option allein wie folgt less --follow-name file.log
nicht automatisch den Dateiaktualisierungen. Sie müssen den Verfolgungsmodus aktivieren, indem Sie drücken ShiftF.
(Beenden Sie den Modus, um zu navigieren, mit ControlC.)
Anstatt der Datei zu folgen,--follow-name
verändert das Verhaltenvon weniger.
Dadurch wird die Befehlstaste ShiftFinnerhalb von less
basierend auf dem Dateinamen und nicht dem Dateideskriptor ausgeführt.
Außerdem gibt es keine normale Option, less
im Follow-Modus zu starten.
Sie können jedoch die Befehlszeile verwenden, umTastenanschläge zum Ausführennach dem Start, indem Sie ihnen das Präfix voranstellen +
.
Wenn Sie die Modifikatoroption mit kombinieren +F
, less
wird tatsächlich im (modifizierten) Folgemodus gestartet.
Verwenden Sie es +F
allein für das Äquivalent von plain tail -f
:
less +F file.log
Antwort3
Ich habe gerade die Antwort in diesem U&L Q&A mit dem Titel gefunden:Wie erstelle ich eine tail -f
Protokollrotation für Dateien?.
Verwendung von tail
:
(wenn die Installation von GNU Tail auf Ihrem System eine Option ist)
tail -F program.log
Von demtail-Manpage:
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f,
--follow, and --follow=descriptor are equivalent
-F same as --follow=name --retry
--retry keep trying to open a file even when it is or becomes
inaccessible; useful when following by name, i.e., with
--follow=name
Der Schlüssel ist der --retry
Schalter. Dieser weist den tail
Befehl an, immer wieder zu versuchen, einer Datei nach Namen zu folgen. Der -F
Schalter führt sowohl a als -f
auch a aus --retry
.
Verwenden vonless
Wie @StephaneChazela in den Kommentaren anmerkte, wird Folgendes nicht funktionieren.
tail -F program.log | less
Die einzige andere Möglichkeit, die Sie haben, besteht darin, „less“ direkt zu verwenden, vorausgesetzt, es unterstützt den --follow-name
Schalter und less
die Datei direkt, und tail
vollständig auf die Verwendung zu verzichten.
less --follow-name program.log