Wie kann ich weniger einen Dateinamen als eine Inode-Nummer verwenden?


11

Ich habe eine Software, die ihre Protokolldateien beim Neustart dreht. Während der Entwicklung starte ich es jedoch häufig neu, sodass ich die neueste Protokolldatei jederzeit überwachen möchte.

Wenn ich lessnormal mit beginne less program.logund Shift+ fbis zum Ende drücke, wenn die Protokolldatei gedreht wird, überwache ich weiterhin die alte Protokolldatei. Ich gehe davon aus, dass dies daran liegt, dass die Inode-Nummer gleich bleibt und lessein offenes Dateihandle für diesen Inode hat.

Ist es möglich, die neuesten Aktivitäten in der aktuell aufgerufenen Protokolldatei zu überwachen program.log?

Insbesondere arbeite ich an Sun OS, daher wäre eine Lösung, die dort funktioniert, ideal.


Vielleicht tail -F program.log | lesswird es funktionieren
sendmoreinfo

tail -f program.log hast du das versucht
Rahul Patil

Antworten:


17

Verwenden less --follow-nameSie diese Option, wenn Ihre Version dies lessunterstützt. Diese Option wurde in Version 416 eingeführt.


Hervorragende Antwort. Sowohl Solaris 10 als auch Solaris 11 verwenden weniger Version 436, sodass diese Option tatsächlich verfügbar ist.
unixhacker2010

5

Die lessOption --follow-nameist nur ein Teil der Lösung.
Zum Ersetzen tail -Fwird ein anderes Argument benötigt:

less --follow-name +F file.log

Die Option allein wie less --follow-name file.logfolgt nach den Dateiaktualisierungen nicht. Sie müssen in den Folgemodus wechseln, indem Sie drücken ShiftF.
(Verlassen Sie den Navigationsmodus ControlC.)

Anstatt der Datei zu folgen, wird --follow-name das Verhalten von weniger geändert .
Die Befehlstaste ShiftFinnerhalb von lessfollow basiert auf dem Dateinamen und nicht auf dem Dateideskriptor.

Es gibt auch keine normale Option, um lessim Folgemodus zu starten .
Sie können jedoch die Befehlszeile verwenden, um Tastenanschläge nach dem Start auszuführen , indem Sie ihnen ein Präfix voranstellen +.
Die Modifikator Option Kombinieren mit +F, lessbeginnt tatsächlich in dem (modifizierte) Folgemodus.

Verwenden Sie +Fallein für das Äquivalent von plain tail -f:

less +F file.log

1

Ich habe gerade die Antwort in diesen U & L-Fragen und Antworten mit dem Titel gefunden: Wie tail -ferstelle ich eine von Protokollen gedrehte Datei? .

Verwenden von tail:

(Wenn die Installation von GNU Tail auf Ihrem System eine Option ist)

tail -F program.log

Von der Heck-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 --retrySchalter. Dies weist den tailBefehl an, erneut zu versuchen, einer Datei mit Namen zu folgen. Der -FSchalter macht sowohl a -fals auch a --retry.

Verwenden von less

Wie @StephaneChazela in den Kommentaren hervorhob, wird das Folgende nicht funktionieren.

tail -F program.log | less

Die einzige andere Möglichkeit, die Sie haben, besteht darin, weniger direkt zu verwenden, vorausgesetzt, sie unterstützt den --follow-nameSwitch und lessdie Datei direkt und verzichtet tailvollständig auf die Verwendung .

less --follow-name program.log

Ich mag Sun OS manchmal nicht ...
Alex Chamberlain

Ich stimme zu, ich habe jahrelang gearbeitet, es macht dich verrückt, dass das Werkzeug für einige der Apps etwa 10 Jahre alt ist. Macht keinen Sinn. Diese Seite war von unschätzbarem Wert, um Solaris auf dem Laufenden
slm

Wenn Sie mehr Vernunft wollen, schauen Sie sich pkgsrc.org an :)
sendmoreinfo

Das wird nicht gut funktionieren. Weil lesshängt, wenn Sie "G" pr "F" tun. Was du unterbrechen kannst, indem du "Strg-C" machst, aber dann tötet es den Schwanz. Sie können dann den Schwanz gegen Strg-C immunisieren, aber es ist immer noch nicht sehr brauchbar.
Stéphane Chazelas

Im Hinblick auf die GNU Schwanz: Schauen Sie sich diese Informationen zu , welche Werkzeuge sollten auf jedem Solaris - Host zur Verfügung stehen. (Tatsächlich ist GNU-Tail in Solaris 11 standardmäßig vorhanden.) Solaris-Systemadministratoren erschweren es ihren Benutzern häufig, die Installation bei der eigentlichen Installation zu belassen, während GNU-Tools für Solaris heutzutage direkt von Oracle oder in einigen Fällen Teil der Standardinstallation verfügbar sind. Kein Grund, es nicht Teil Ihrer Installation zu machen. Kein Grund, zu "inoffiziellen" Repos zu gehen. Siehe Link.
Unixhacker2010
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.