%20Anmeldebildschirm%20ansehen.png)
Ich betreibe einen Mailserver, mit dem ich mich per SSH verbinde. Mein Server .bash_profile
ist so konfiguriert, dass eine SSH-Sitzung an eine bestimmte screen
Sitzung angehängt wird.
Nun möchte ich ein Protokoll (z. B. das Syslog) in einem Fenster dieser Bildschirmsitzung ausdrucken. Ich habe versucht,
tail -f /var/log/syslog
aber die Ausgabe stoppt jeden Tag um 6:25. Ich nehme an, das ist die Zeit, zu der das Protokoll rotiert wird. Gibt es also eine Möglichkeit, das Protokoll auf dem Bildschirm auszudrucken?
Antwort1
Du brauchsttail --follow=name /var/log/syslog
Der Grund dafür ist, dass standardmäßig – angeblich aus Leistungsgründen – tail
die angegebene Datei geöffnet wird und dann beobachtet wirdder Dateideskriptores erhält aus diesem open(2)
Aufruf für Änderungen. Dies funktioniert einwandfrei, solange die Datei geändert wird – angehängt oder sogar neu geschrieben wird (indem sie zuerst gekürzt wird), aber es funktioniert nicht mehr, wenn die Dateiersetzt– das heißt, entfernt und mit demselben Namen erstellt, und das ist das, was logrotate
normalerweise passiert.
Der "Name"-Modus von --follow
makes tail
verwendet einen aufwändigeren stat(2)
Systemaufruf, der den Dateinamen jedes Mal über die Dateisystemebene "auflöst" und wenn tail
bemerkt wird, dass die Datei ihren sogenannten"Inode", tail
öffnet die Datei erneut.
Die Ausgabe von man tail
:
-f, --follow[={name|descriptor}]
gibt angehängte Daten aus, wenn die Datei wächst; ein fehlendes Optionsargument bedeutet „Deskriptor“
-F
Sie können sich auch die Befehlszeilenoption ansehen , die wie folgt definiert ist:
-F
gleich wie--follow=name --retry
Antwort2
Ihre Vermutung ist tatsächlich richtig. Zu diesem Zeitpunkt unterbricht das Syslog das Schreiben in das Protokoll, macht ein GZ daraus und startet das Protokollieren erneut.
Sie könnten es mit versuchen
tail -f --retry /var/log/syslog
Auf diese Weise sollte tail erneut versuchen, die Datei zu öffnen, wenn die Protokollrotation abgeschlossen ist.