Rotation von Log-Dateien
Manchmal können Protokolldateien ziemlich gross werden. Um dies zu vermeiden, können sie "rotiert" werden. Dafür ist logrotate
das geeignete Werkzeug.
Als Beispiel deckt dieser Artikel die Konfiguration von logrotate
für die Protokolldateien einer Tomcat 8-Instanz ab, die sich in /home/www-data/example.ch/logs/catalina.out
befinden.
logrotate konfigurieren
Sie müssen eine Konfigurationsdatei (z.B. als versteckte Datei im Home-Ordner) hinzufügen: ~/.logrotate.conf
.
Eine einfache Konfiguration könnte so aussehen:
/home/www-data/example.ch/logs/catalina.out {
daily
rotate 14
notifempty
compress
copytruncate
}
Mit dieser Konfiguration wird logrotate
...
- die Datei
~ /example.ch/logs/catalina.out
einmal pro Tag rotieren - 14 Tage Log-Dateien behalten
- keine Rotation vornehmen, wenn die Log-Datei leer ist
- die Log-Dateien komprimieren
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.gz
... / catalina.out-20161213.gz
... / catalina.out-20161214.gz
Weitere Optionen zur Konfiguration von logrotate finden Sie hier.
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 Zustandsdatei mit der Option -s
bereitstellen, da die globale Zustandsdatei nur vom Benutzer root
beschreibbar ist.
Um diesen Befehl täglich auszuführen, können wir ihn zu cron hinzufügen, indem wir crontab -e
ausführen. Fügen Sie einfach die folgende Zeile an das Ende der Datei:
0 0 * * * /usr/sbin/logrotate -s ~/.logrotate.status.tmp ~/.logrotate.conf >/dev/null 2>&1
Nun wird das logrotate
einmal am Tag um Mitternacht 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 hier.