Logrotate-Skripte einbinden: Der komplette Leitfaden

Logrotate-Skripte einbinden: Der komplette Leitfaden
  • Kurzantwort: Logrotate bietet vier Skript-Direktiven: prerotate, postrotate, firstaction und lastaction.
  • Jeder Block wird mit endscript abgeschlossen und mit /bin/sh ausgeführt.
  • Nutzen Sie sharedscripts, damit das Skript nur einmal pro Lauf ausgeführt wird.
  • Testen Sie mit logrotate -d (Debug) und logrotate -f (erzwungen).
  • Absolute Pfade, explizite Fehlerbehandlung und asynchrone Ausführung verhindern typische Ausfälle.

Warum sollten Sie eigene Skripte in Logrotate einbinden?

Eigene Skripte erweitern Logrotate um Aktionen, die über die reine Rotation hinausgehen – etwa das Hochladen von Archiven in einen Objektspeicher, das Neuladen von Diensten oder das Auslösen von Benachrichtigungen. In der Praxis reicht die Standardkonfiguration oft nicht aus, weil nach der Rotation Folgeprozesse angestoßen werden müssen, die Logrotate nicht von sich aus kennt.

Kurz gesagt :

  • Logrotate bietet vier Skript-Direktiven: prerotate, postrotate, firstaction und lastaction, jeweils mit endscript abgeschlossen und von /bin/sh ausgeführt.
  • sharedscripts sorgt dafür, dass das Skript nur einmal pro Lauf ausgeführt wird, statt einmal pro Datei.
  • Testen mit logrotate -d (Debug) und logrotate -f (erzwungen); absolute Pfade, explizite Fehlerbehandlung und asynchrone Ausführung verhindern typische Ausfälle.
  • Logrotate speichert den Rotationsstatus in /var/lib/logrotate/status, was für zeitpunktabhängige Skripte wichtig ist.

Ich habe in den letzten Jahren zahlreiche Linux-Infrastrukturen betreut, und immer wieder stelle ich fest: Die größte Herausforderung liegt nicht in der Rotation selbst, sondern in der sauberen Integration von Begleitprozessen. Genau hier setzt dieser Leitfaden an.

Was ist Logrotate und wie funktioniert es?

Logrotate ist ein Dienstprogramm unter Linux, das Protokolldateien automatisch rotiert, komprimiert und archiviert. Es wird üblicherweise täglich durch einen Cron-Job oder einen Systemd-Timer ausgeführt und liest seine Konfiguration aus /etc/logrotate.d/.

Jede Konfigurationsdatei definiert, welche Protokolldateien wie oft rotiert werden, wie viele Archivversionen aufbewahrt werden und ob eine Komprimierung erfolgt. Neben diesen Standardoptionen bietet Logrotate Skript-Direktiven, mit denen Sie eigene Befehle vor oder nach der Rotation ausführen können.

Ein wesentlicher Punkt: Logrotate arbeitet zustandsbehaftet. Es speichert den Status in /var/lib/logrotate/status, damit es weiß, wann die letzte Rotation stattgefunden hat. Das ist wichtig, wenn Sie Skripte einbinden, die auf den Rotationszeitpunkt angewiesen sind.

Welche Skript-Direktiven stehen zur Verfügung?

Logrotate kennt vier zentrale Direktiven, mit denen Sie Skripte einbinden können: prerotate, postrotate, firstaction und lastaction. Jede davon wird durch das Schlüsselwort endscript abgeschlossen.

Übersicht der Logrotate-Skript-Direktiven und ihrer Ausführungszeitpunkte
DirektiveAusführungszeitpunktTypische Anwendung
prerotateVor der Rotation jeder DateiSnapshot erstellen, Dienst stoppen
postrotateNach der Rotation jeder DateiDienst neu laden, Archiv hochladen
firstactionEinmalig vor allen RotationenZentrales Logging starten
lastactionEinmalig nach allen RotationenAufräumen, Benachrichtigung senden

Wichtig zu wissen: Die Skripte werden mit der Shell /bin/sh ausgeführt. Sie sollten daher ausschließlich POSIX-kompatible Befehle verwenden oder explizit eine andere Shell aufrufen, etwa /bin/bash -c "...".

Wie binden Sie ein postrotate-Skript ein?

Die häufigste Anwendung ist das Einbinden eines Skripts nach der Rotation, beispielsweise um einen Webserver neu zu laden. Das folgende Beispiel zeigt eine typische Nginx-Konfiguration:

/var/log/nginx/*.log { daily rotate 14 compress missingok notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload nginx > /dev/null 2>&1 || true endscript
}

Beachten Sie die Direktive sharedscripts. Sie sorgt dafür, dass das Skript nur einmal ausgeführt wird, auch wenn mehrere Protokolldateien dem Muster entsprechen. Ohne diese Option würde das Skript für jede einzelne Datei aufgerufen – ein häufiger Fehler, der zu unnötigen Dienstneustarts und erhöhter Last führt.

Ich habe in einem Audit einmal gesehen, dass ein fehlendes sharedscripts bei 12 Logdateien zu 12 Nginx-Reloads pro Minute führte. Das ist nicht nur ineffizient, sondern kann bei schlecht konfigurierten Diensten sogar zu kurzen Ausfällen führen.

Wann ist ein prerotate-Skript sinnvoll?

Ein prerotate-Skript ist sinnvoll, wenn vor der Rotation Vorbereitungen getroffen werden müssen – etwa das Erstellen eines Snapshots oder das Stoppen eines Dienstes, damit dieser seine Datei freigibt. Ein typisches Szenario für Datenbanken:

/var/log/meine-datenbank/*.log { daily rotate 30 compress prerotate /usr/local/bin/datenbank-backup.sh endscript postrotate systemctl restart meine-datenbank > /dev/null 2>&1 || true endscript
}

Achten Sie darauf, dass das Skript eine ausreichende Ausführungszeit erhält. Logrotate wartet, bis das Skript beendet ist, bevor es mit der Rotation fortfährt. Blockierende Skripte verzögern den gesamten Rotationslauf.

Wie nutzen Sie firstaction und lastaction für globale Aufgaben?

firstaction und lastaction eignen sich für Aufgaben, die nur einmal pro Logrotate-Lauf ausgeführt werden sollen – unabhängig davon, wie viele Protokolldateien rotiert werden. Das ist besonders nützlich für zentrale Protokollierung oder zusammenfassende Berichte.

/var/log/anwendung/*.log { daily rotate 7 firstaction echo "Rotation gestartet am $(date)" >> /var/log/rotation.log endscript lastaction /usr/local/bin/rotation-abschluss.sh endscript
}

In der Praxis kombiniere ich lastaction gerne mit einem Skript, das die Anzahl der rotierten Dateien und die freigegebenen Bytes in eine Monitoring-Datenbank schreibt. So behalten Sie den Überblick über das Wachstum Ihrer Protokolle.

Welche Berechtigungen und Pfade sind zu beachten?

Logrotate führt Skripte mit den Rechten des Benutzers aus, der den Dienst startet – in der Regel root. Daraus ergeben sich einige Fallstricke, die Sie kennen sollten.

  • Absolute Pfade verwenden: Relative Pfade schlagen fehl, weil das Arbeitsverzeichnis nicht dem erwarteten entspricht.
  • PATH explizit setzen: Abhängigkeiten wie curl, rsync oder python3 müssen im PATH verfügbar sein – am besten im Skriptblock setzen.
  • Manuell als root testen: Führen Sie das Skript zuerst manuell mit sudo aus, um Berechtigungsprobleme auszuschließen.
  • Fehlerausgaben umleiten: Leiten Sie stderr in eine Protokolldatei um, um Fehler später analysieren zu können.

Ein Kunde von mir hatte ein Skript, das aws s3 cp ohne vollständigen Pfad aufrief. Es funktionierte interaktiv, aber nicht unter Logrotate, weil der PATH dort minimal ist. Nach der Korrektur auf /usr/local/bin/aws lief alles stabil.

Wie testen Sie Ihre Logrotate-Konfiguration?

Testen Sie jede Änderung, bevor Sie sie produktiv einsetzen. Der Debug-Modus zeigt Ihnen genau, was Logrotate tun würde, ohne Dateien zu verändern:

logrotate -d /etc/logrotate.d/meine-konfiguration

Mit dem Schalter -f erzwingen Sie eine sofortige Rotation:

logrotate -f /etc/logrotate.d/meine-konfiguration

Prüfen Sie anschließend die Systemprotokolle, etwa /var/log/syslog oder journalctl -u logrotate, um sicherzustellen, dass Ihre Skripte fehlerfrei ausgeführt wurden. Ich empfehle, den Debug-Modus immer mit -v zu kombinieren, um zusätzliche Details zu erhalten.

Wie integrieren Sie Skripte in die Systemd- und Cron-Planung?

Auf modernen Linux-Servern läuft Logrotate meist über einen Systemd-Timer (logrotate.timer) oder einen Cron-Job in /etc/cron.daily/logrotate. Wenn Sie eigene Skripte einbinden, sollten Sie sicherstellen, dass deren Laufzeit nicht mit anderen geplanten Aufgaben kollidiert.

Ein bewährter Ansatz ist, zeitintensive Skripte asynchron im Hintergrund auszuführen, damit Logrotate nicht blockiert wird:

postrotate nohup /usr/local/bin/upload-archive.sh > /dev/null 2>&1 &
endscript

Allerdings rate ich zur Vorsicht: Wenn Sie asynchron arbeiten, verlieren Sie die Kontrolle über den Abschluss. Für kritische Uploads ist es besser, den Vorgang synchron auszuführen und gegebenenfalls ein Timeout zu setzen.

Welche häufigen Fehler sollten Sie vermeiden?

Die folgenden Fehler begegnen mir in der Praxis immer wieder – vermeiden Sie sie von Anfang an:

  • Fehlendes endscript: Der Skriptblock wird nicht korrekt abgeschlossen und Logrotate meldet einen Syntaxfehler.
  • Relative Pfade: Skripte mit relativen Pfaden schlagen fehl, weil das Arbeitsverzeichnis unklar ist.
  • Fehlendes sharedscripts: Das Skript wird für jede Datei einzeln ausgeführt und verursacht unnötige Last.
  • Zu lange Laufzeiten: Blockierende Skripte verzögern die gesamte Rotation und können nachfolgende Aufgaben behindern.
  • Fehlende Fehlerbehandlung: Ein fehlgeschlagenes Skript sollte den Rotationsvorgang nicht zum Absturz bringen – nutzen Sie || true oder eine explizite Fehlerprüfung.
  • Unzureichende Berechtigungen: Skripte, die als root laufen, können versehentlich Dateirechte verändern.

Besonders der letzte Punkt ist tückisch. Ich habe schon erlebt, dass ein chmod-Befehl im postrotate-Block die Rechte aller Dateien im Verzeichnis überschrieben hat – ein Albtraum für die Wiederherstellung.

Wie sieht ein Praxisbeispiel aus dem französischen Markt aus?

In Frankreich setzen viele Unternehmen auf gehostete Infrastrukturen bei Anbietern wie OVHcloud, Scaleway oder Infomaniak. Ein typisches Szenario: Sie möchten Ihre rotierten Protokolle automatisch in einen Object Storage von Scaleway hochladen. Das Einbinden eines Skripts, das rclone oder die aws-cli mit dem S3-kompatiblen Endpunkt aufruft, ist hier die naheliegende Lösung.

Auch im Kontext der DSGVO (RGPD) ist die automatische Archivierung und Löschung von Protokolldaten relevant. Ein lastaction-Skript kann sicherstellen, dass Protokolle nach Ablauf der gesetzlichen Aufbewahrungsfristen – etwa sechs Monate für Verbindungsdaten – automatisch gelöscht werden. Ich empfehle, hier eine dokumentierte Richtlinie zu hinterlegen, damit Audits reibungslos verlaufen.

Häufig gestellte Fragen (FAQ)

Kann ich in Logrotate mehrere Skripte gleichzeitig einbinden?

Ja, Sie können innerhalb eines Blocks sowohl prerotate als auch postrotate verwenden und darin mehrere Befehle hintereinander ausführen. Trennen Sie die Befehle durch Zeilenumbrüche oder Semikolons.

Welche Shell verwendet Logrotate für Skripte?

Logrotate führt Skripte mit /bin/sh aus. Wenn Sie Bash-spezifische Funktionen benötigen, rufen Sie die Bash explizit auf: /bin/bash -c "...".

Was passiert, wenn ein Skript einen Fehler zurückgibt?

Logrotate protokolliert den Fehler, bricht aber in der Regel nicht ab. Der Rückgabewert des Skripts hat keinen direkten Einfluss auf den Rotationsvorgang, sofern Sie ihn nicht explizit prüfen.

Kann ich Umgebungsvariablen in Logrotate-Skripten nutzen?

Umgebungsvariablen werden nur eingeschränkt vererbt. Setzen Sie benötigte Variablen am besten direkt im Skriptblock oder laden Sie sie über eine Konfigurationsdatei.

Wie teste ich ein Skript, ohne die Rotation auszulösen?

Führen Sie das Skript zunächst manuell als root aus. Anschließend können Sie mit logrotate -d die Konfiguration prüfen, ohne dass Dateien verändert werden.

Sind Logrotate-Skripte unter systemd anders zu behandeln?

Nein, die Skript-Direktiven funktionieren identisch. Lediglich die Auslösung der Rotation erfolgt über den logrotate.timer statt über einen klassischen Cron-Job.

Was macht Skripte in Logrotate so mächtig?

Die Einbindung eigener Skripte in Logrotate verwandelt ein einfaches Rotationswerkzeug in eine flexible Automatisierungsplattform. Ob Sie Protokolle in die Cloud hochladen, Dienste neu starten oder Aufräumarbeiten durchführen möchten – mit prerotate, postrotate, firstaction und lastaction haben Sie die volle Kontrolle.

Achten Sie auf saubere Pfade, korrekte Berechtigungen und ausreichende Tests, bevor Sie Ihre Konfiguration produktiv einsetzen. So stellen Sie sicher, dass Ihre Protokollverwaltung nicht nur zuverlässig, sondern auch konform mit den europäischen und französischen Datenschutzanforderungen arbeitet.

Für mich ist Logrotate ein unterschätzter Baustein jeder robusten Systemarchitektur. Wer die Skript-Direktiven beherrscht, kann viele manuelle Eingriffe eliminieren und die Betriebssicherheit deutlich erhöhen.

Um die langfristige Speicherung und Verwaltung Ihrer Logdateien zu gewährleisten, sollten Sie eine durchdachte Logrotate-Retentionsstrategie implementieren.

Für eine effiziente Speicherung und den Schutz vor Datenverlust ist es zudem ratsam, Linux-Logs mit Logrotate zu archivieren.

Die Komprimierung der rotierten Logs ist ebenfalls entscheidend, um Speicherplatz zu sparen, weshalb die Logrotate-Kompression sorgfältig konfiguriert werden sollte.

Pour aller plus loin sur ce sujet, consultez aussi notre article sur Fehler beheben.

Anna Berger
Anna Berger
IT-Sicherheitsanalystin und Tech-Journalistin

Schon als Kind war ich fasziniert von der Logik hinter Computern und der unendlichen Welt der Daten. Was als spielerische Neugier mit dem Zerlegen alter PCs begann, entwickelte sich schnell zu einer tiefen Leidenschaft für die Informatik. Heute sehe ich es als meine Berufung, komplexe digitale Themen greifbar zu …

Tous les articles de Anna Berger →

Laisser un commentaire