Wie mache ich ein "tail -f" von loggedrehten Dateien?

106

Auf einem lang laufenden System habe ich normalerweise ein Terminal mit

$ tail -f /var/log/kern.log

oder so etwas offen.

Aber von Zeit zu Zeit muss ich einen solchen Befehl neu starten, da keine neuen Nachrichten mehr angezeigt werden.

Ich nehme an, das liegt daran, dass der rotierende Protokolljob, der die Protokolldatei ersetzt hat, tail -f"überwacht" hat.

Wie kann ich diese Neustartprobleme vermeiden?

Kann ich so aufrufen tail, dass es den rotierenden Prozess bemerkt und das Richtige tut?

(Dieses Problem tritt auf einem Ubuntu 11.04-System auf, das rsyslogdstandardmäßig verwendet wird.)

maxschlepzig
quelle

Antworten:

162

Verwenden Sie -Fstattdessen die Option:

tail -F /var/log/kern.log

Mit dieser -FOption können Sie tailÄnderungen an der Datei anhand des Dateinamens verfolgen, anstatt die Inode-Nummer zu verwenden, die sich während der Drehung ändert. Es wird auch weiterhin versucht, die Datei zu öffnen, wenn sie nicht vorhanden ist.

andcoz
quelle
7
Genial, ja, das bin ich. (Nur zur Veranschaulichung, dies ist eine GNU-Tail-Option - wobei GNU-Tail natürlich die Standardeinstellung unter Ubuntu ist).
Maxschlepzig
Sie haben Recht: - / Ich habe nicht bemerkt, dass Ubuntu in Ihrer Frage nur ein Beispiel ist.
Andcoz
überhaupt kein Problem - ich habe nur der Vollständigkeit halber kommentiert (manchmal möchte ich nur schauen, was POSIX ist und was nicht). Die Frage war in der Tat ziemlich viel über Ubuntu.
Maxschlepzig
1
Ist tail -F /var/log/kern.loggleichbedeutend mit tail -f --follow=name --retry /var/log/kern.log?
Basj
1
@Basj - laut man7.org/linux/man-pages/man1/tail.1.html ist es äquivalent
andrej