Zum Hauptinhalt springen

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.