logrotate ist das Standardwerkzeug unter Linux, um Logdateien automatisch zu rotieren. Ohne Rotation wachsen Logs unbegrenzt, füllen die Festplatte und erschweren die Fehlersuche. logrotate benennt alte Dateien um, komprimiert sie und verwirft sie nach einer eingestellten Anzahl — im Hintergrund, ohne manuelles Eingreifen.

So funktioniert die Rotation

logrotate läuft in der Regel einmal täglich über einen Eintrag in cron.daily oder als Cron- beziehungsweise systemd-Timer. Dabei wird /var/log/syslog zu syslog.1, syslog.1 zu syslog.2.gz und so weiter; eine neue leere Datei entsteht automatisch. Die globale Konfiguration steht in /etc/logrotate.conf, einzelne Dienste legen eigene Regeln in /etc/logrotate.d/ ab.

Wichtige Direktiven

  • daily, weekly, monthly — Zeitabstand der Rotation.
  • rotate N — wie viele alte Versionen aufgehoben werden.
  • compress — alte Logs mit gzip komprimieren; delaycompress verschiebt das Komprimieren um einen Zyklus.
  • missingok — keine Fehlermeldung, wenn die Datei fehlt; notifempty — nicht rotieren bei leerer Datei.
  • copytruncate — Datei kopieren und leeren (sinnvoll bei Diensten, die ihre Logdatei offen halten).
  • postrotateendscript — Befehle nach der Rotation ausführen, etwa ein Reload des Dienstes.
  • maxsize / size — zusätzlich nach Größe rotieren.

Beispiel

/var/log/nginx/access.log {
    weekly
    rotate 8
    compress
    missingok
    notifempty
    postrotate
        /usr/sbin/nginx -s reopen
    endscript
}

Praxis-Tipps

  • logrotate -d /etc/logrotate.conf zeigt im Debug-Modus, was passieren würde, ohne etwas zu ändern.
  • logrotate -f /etc/logrotate.conf erzwingt eine Rotation sofort.
  • Logrotation ist Teil eines sauberen Logging-Konzepts: Syslog sammelt die Meldungen, logrotate begrenzt ihren Platz.
  • Systemd-Journal-Dateien (journalctl) rotiert das Journal selbst über Größenlimits — logrotate ist für klassische Datei-Logs zuständig.