Zum Hauptinhalt springen

Rotation von Log-Dateien

Manchmal können Log-Dateien sehr gross werden. Um dies zu vermeiden, sollten sie regelmässig "rotiert" werden.

logrotate wurde entwickelt, um die Verwaltung von Systemen zu erleichtern, die eine grosse Anzahl von Log-Dateien erzeugen. Es ermöglicht das automatische Rotieren, Komprimieren, Löschen und Versenden von Log-Dateien. Jede Logdatei kann täglich, wöchentlich, monatlich oder wenn sie zu gross wird, verarbeitet werden.

Logrotate Konfigurieren

Sie müssen eine Konfigurationsdatei erstellen(z.B. als versteckte Datei im Home-Verzeichnis): ~/.logrotate.conf. Eine einfache Konfiguration könnte folgendermassen aussehen

~/.logrotate.conf
~/*/logs/catalina.out {
daily
rotate 14
notifempty
compress
copytruncate

compresscmd /usr/bin/zstdmt
compressoptions -18 -T0 --rm -qq
compressext .zst
uncompresscmd /usr/bin/unzstd
}

Mit dieser Konfiguration wird logrotate:

  • rotiert einmal täglich alle Dateien, die ~/*/logs/catalina.out entsprechen
  • behält 14 Log-Dateien
  • rotiert nicht, wenn die Datei leer ist
  • komprimiert die Log-Dateien mit ZSTD
  • kopiert die Logdatei und leert sie dann (copytruncate) Die copytruncate Option kopiert die Log-Datei und leert sie danach. Damit bleiben offene Datei-Handler in der Applikation gültig.

Dies wird in täglichen Log-Dateien wie folgt abgebildet:

  • .../catalina.out-20161212.zst
  • .../catalina.out-20161213.zst
  • .../catalina.out-20161214.zst

Weitere Optionen zur Konfiguration finden Sie in der logrotate man page.

Logrotate täglich ausführen

Logrotate kann wie folgt ausgeführt werden:

/usr/sbin/logrotate -s ~/.logrotate.status.tmp ~/.logrotate.conf

Wir müssen eine benutzerdefinierte Statusdatei mit der Option -s bereitstellen, da die globale Statusdatei nur vom Benutzer root geschrieben werden kann.

Um diesen Befehl täglich auszuführen, fügen wir ihn der crontab hinzu, indem wir crontab -e ausführen. Fügen Sie einfach die folgende Zeile am Ende der Datei hinzu:

22 0 * * * /usr/sbin/logrotate -s ~/.logrotate.status.tmp ~/.logrotate.conf >/dev/null 2>&1

Nun wird das logrotate einmal am Tag um 00:22 ausgeführt. Das >/dev/null 2>&1 am Ende des Befehls unterdrückt sämtliche Ausgaben auf STDOUT.

Weitere Informationen zur Konfiguration von cron finden Sie in der zugehörigen Dokumentationseite Cron Jobs.