Wie funktioniert Logrotate?

Wie funktioniert Logrotate?

Ich versuche, mit logrotate eine Protokolldatei zu überwachen, die häufig rotiert. Aber ich bekomme das nicht richtig hin. Kann mir jemand erklären, wie logrotate eigentlich funktioniert?

Wird eine Datei umbenannt und eine neue Datei erstellt?

oder wird eine Datei mit neuem Namen kopiert und die aktuelle Datei geleert?

Vor der Drehung:

131887 -rw-r--r-- 1 root root  11385 Sep 25 03:40 /var/log/sas.log

Nach der Drehung:

131887 -rw-r--r-- 1 root root  0 Sep 25 04:40 /var/log/sas.log

131911 -rw-r--r-- 1 root root   11385 Sep  25 04:40 /var/log/sas.log.1

Antwort1

Wenn die Option truncate in der Konfigurationsdatei aktiviert ist, wird die Datei nicht verschoben - ihr Inhalt wird lediglich in eine andere, neu erstellte Datei kopiert und die aktuelle Datei wird gelöscht, sodass sich die Inode-ID nicht ändert. Tatsächlich wird die Datei nie geändert.

Antwort2

Bei der Rotation wird die aktuelle Logdatei verschoben und ggf. komprimiert, wenn das angegeben ist. Anschließend wird sie neu erstellt. [suche nach einer anderen Quelle als meiner Erfahrung]

Das ist ein Problem, wenn ein Dienst ausgeführt wird, bei dem die Protokolldatei zum Zeitpunkt der Rotation geöffnet ist. Die Verknüpfung der Datei wird aufgehoben, aber der Speicherplatz wird nicht wirklich freigegeben, da die Datei noch geöffnet ist.

Aus diesem Grund installieren Dienste häufig ein aufwändigeres Logrotate-Skript, das die Rotation handhabt. Sehen Sie sich als Beispiel die /etc/logrotate.d/nginxDefinition des Rotationsverhaltens für den nginxWebserver an:

[....]
postrotate
    invoke-rc.d nginx rotate >/dev/null 2>&1
endscript

Der postrotateBlock wird ausgeführt, nachdem die neue Protokolldatei erstellt wurde. Er ruft das Serviceskript von nginx auf und rotateweist den Dienst an,Öffnen Sie die Protokolldatei erneut.

verwandte Informationen