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
~/*/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
) Diecopytruncate
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.