Skip to main content

Linux-Systemprogramme: Logrotate

1 Name

logrotate - rotiert, komprimiert und mailt System-Log Dateien

2 Syntax

2.1 logrotate

[-dv] [-f|--force] [-s|--state Statusdatei] Konfigurationsdatei ...

3 Beschreibung

logrotate ist dazu entworfen, die Verwaltung von Systemen zu vereinfachen, die eine große Anzahl von Log-Dateien generieren. Es erlaubt eine automatische Rotation, Kompression, Entfernung und Verschickung der Logdateien. Jede Logdatei kann täglich, wöchentlich, monatlich oder dann erfolgen, wenn sie zu groß geworden ist.

Normalerweise wird logrotate als täglicher cron-job ausgeführt. Es bearbeitet eine Logdatei nicht mehr als einmal täglich, wenn das Kriterium für die Behandlung dieser Logdatei nicht seine Größe ist, logrotate mehr als einmal täglich aufgerufen wird oder die -f oder --force Option angegeben wurde.

Auf der Kommandozeile können beliebig viele Konfigurationsdateien angegeben werden. Spätere Konfigurationsdateien können Optionen von früheren überschreiben, so daß es wichtig ist, auf die richtige Reihenfolge zu achten. Normalerweise sollte eine Konfigurationsdatei benutzt werden, die ihrerseits weitere solcher Dateien per include-Befehl einfügt. Weiter unten wird die Anwendung der include-Direktive genauer beschrieben. Wird auf der Kommandozeile ein Verzeichnis angegeben, so werden alle darin enthaltenen Dateien als Konfigurationsdateien abgearbeitet.

Werden keine Kommandozeilenparameter angegeben, gibt logrotate einen kurzen Hilfstext und Versionsinformationen aus. Treten während der Rotation von Logdateien Fehler auf, so gibt logrotate einen Rückgabewert ungleich 0 zurück.

4 Optionen

4.1 -d

Schaltet den Debug-Modus ein und impliziert -v. Im Debug-Modus werden keine Veränderungen an den Logdateien und der Status-Datei vorgenommen.

4.2 -f, --force

Weist logrotate an, die Rotation zu erzwingen, auch wenn sie eigentlich nicht notwendig wäre. Manchmal kann das nützlich sein, wenn neue Einträge in der Konfigurationsdatei vorgenommen wurden, oder wenn alte Logdateien von Hand gelöscht wurden, weil die neuen Dateien so erstellt werden und das Loggen fehlerfrei weiterläuft.

4.3 -s, --state Statusdatei

Weist logrotate an, eine alternative Statusdatei zu benutzen. Das kann nützlich sein, wenn mehrere User logrotate für verschiedene Logdateien benutzen. Die voreingestellte Statusdatei ist /var/lib/logrotate/status.

4.4 --usage

Gibt eine kurze Hilfsmeldung aus

4.5 -v, --verbose

Gibt Meldungen während der Rotation aus.

5 Konfigurationsdatei

logrotate ließt alles, was es mit Logdateien anstellen soll aus den angegebenen Konfigurationsdateien der Kommandozeile. Jede Konfigurationsdatei kann globale Optionen setzen (lokale Einstellungen überschreiben globale und spätere überschreiben frühere) und kann Logdateien angeben, die rotiert werden sollen. Eine einfache Konfigurationsdatei könnte folgendermaßen aussehen:

# sample logrotate configuration file
compress
/var/log/messages {
  rotate 5
  weekly
  postrotate
    /sbin/killall -HUP syslogd
  endscript
}
"/var/log/httpd/access.log" /var/log/httpd/error.log {
  rotate 5
  mail www@my.org
  size=100k
  sharedscripts
  postrotate
    /sbin/killall -HUP httpd
  endscript
}
/var/log/news/* {
  monthly
  rotate 2
  missingok
  postrotate
    kill -HUP `cat /var/run/inn.pid`
  endscript
  nocompress
}

Die erste Zeile setzt eine globale Option. In unserem Beispiel werden Logdateien komprimiert, nachdem sie rotiert wurden. Kommentare können überall in der Datei auftauchen, solange das erste Zeichen der Zeile, das kein Leerzeichen ist, ein # ist.

Der nächste Abschnitt der Konfigurationsdatei behandelt den Umgang mit der Datei /var/log/messages. Die Logdatei wird durch fünf wöchentliche Rotationen gehen, bevor sie gelöscht wird. Nachdem die Logdatei rotiert wurde (aber bevor die alte Version komprimiert wird) wird das Kommando /sbin/killall -HUP syslogd ausgeführt.

Der nächste Abschnitt definiert die Parameter sowohl für /var/log/httpd/access.log, als auch für /var/log/httpd/error.log. Jede dieser Dateien wird rotiert, wenn sie über 100K wächst und die alten Logdateien werden (unkomprimiert) an www@my.org gemailt, bevor sie gelöscht werden. Die Angabe von sharedscripts bedeutet, daß das postrotate-Script nur einmal aufgerufen wird, nicht für jede angegebene Logdatei. Logdateinamen können in Anführungszeichen gesetzt werden, müssen es, wenn sie Leerzeichen enthalten.

Der letzte Abschnitt definiert die Parameter für alle Dateien im Verzeichnis /var/log/news. Jede Datei wird monatlich rotiert. Es handelt sich um eine einfache Rotation und wenn Fehler für mehr als eine Datei auftreten, werden die Dateien nicht komprimiert.

Wenn das Verzeichnis /var/log/news nicht existiert, wird logrotate eine Fehlermeldung ausgeben. Diese Fehlermeldung kann nicht durch die Direktive missingok unterdrückt werden.

Folgende Direktiven können in einer logrotate Konfigurationsdatei verwendet werden:

5.1 compress

Alte Versionen der Logdateien werden komprimiert.

5.2 compresscmd

Gibt das Kommando an, mit dem komprimiert werden soll. Voreingestellt ist gzip

5.3 uncompresscmd

Gibt das Kommando an, mit dem dekomprimiert werden soll. Voreingestellt ist gunzip

5.4 compressext

Gibt die Namenserweiterung an, die für komprimierte Logdateien verwendet werden soll. Die Voreinstellung ist abhängig vom verwendeten Kompressionsprogramm (.gz für gzip)

5.5 compressoptions

Kommandozeilenoptionen für das verwendete Kompressionsprogramm. Voreingestellt ist für gzip die Option -9 (maximale Kompression)

5.6 copytruncate

Schneidet das orginale Logfile auf die Länge 0 ab, nachdem eine Kopie gezogen wurde, anstatt das alte Logfile zu verschieben und ein neues zu erstellen. Das kann verwendet werden, wenn ein Programm nicht in der Lage sein sollte, sein Logfile zu schließen und so ständig weiter in diese Datei schreibt. Es kann zu einer kurzen Verzögerung kommen, so daß einige Meldungen verloren gehen können. Wenn diese Option benutzt wird, dann hat die create Option keine Bedeutung, weil die alte Logdatei ja bestehen bleibt.

5.7 create

Modus User Gruppe Direkt nach der Rotation (bevor das postrotate-Script abläuft) wird die Logdatei wieder erstellt (mit dem selben Namen, den die gerade rotierte Datei hatte). Modus spezifiziert dabei den Zugriffsmodus in oktaler Form (wie beim Kommando chmod), User ist der User, der zum Eigentümer der Logdatei wird und Gruppe bestimmt die Gruppenzugehörigkeit der Datei. Jedes dieser Attribute kann weggelassen werden, in diesem Fall wird das neue Logfile die selben Attribute bekommen, die schon das alte hatte. Diese Option kann durch die Verwendung von nocreate abgeschaltet werden.

5.8 daily

Logdateien werden täglich rotiert.

5.9 delaycompress

Verschiebt die Kompression des letzten Logfiles auf den nächsten Rotationszyklus. Das hat nur im Zusammenhang mit compress Bedeutung. Es kann verwendet werden, wenn Programme nicht dazu veranlasst werden können, ihre Logdateien zu schließen und daher noch in die alte Datei weiterschreiben wollen.

5.10 extension Erweiterung

Logdateien bekommen die abschließende Namenserweiterung. Wenn die Kompression aktiviert ist, bekommen die Logdateien die Kompressionserweiterung (.gz bei gzip) nach der angegebenen Erweiterung.

5.11 ifempty

Die Logdatei wird selbst dann rotiert, wenn sie leer ist. Das ist der voreingestellte Modus, der durch Verwendung von notifempty überschrieben werden kann.

5.12 include

Datei_oder_Verzeichnis Ließt die angegebene Datei und führt die darin enthaltenen Befehle aus, als stünden sie an der Stelle, an der die include Anweisung steht. Wurde ein Verzeichnisname angegeben, so werden die meisten der in diesem Verzeichnis liegenden Dateien an dieser Stelle eingelesen. Ausgenommen sind nur die Dateien, die keine regulären Dateien sind (wie etwa weitere Verzeichnisse oder Pipes) oder die, deren Namen auf eine der Erweiterungen enden, die unter tabooext angegeben wurden. Die include Anweisung darf nicht innerhalb einer Logdatei-Definition stehen.

5.13 mail Adresse

Wenn eine Logdatei das letzte Mal rotiert wird (so daß sie danach nicht mehr existiert), wird sie an die angegebene Adresse gemailt. Wenn keine solche Mail für eine bestimmte Datei erzeugt werden soll, kann die nomail Direktive benutzt werden.

5.14 mailfirst

Wenn das mail-Kommando benutzt wird, wird die rotierte Datei statt der zu löschenden Datei gemailt.

5.15 maillast

Wenn das mail-Kommando benutzt wird, wird die zu löschende Datei gemailt. (Das ist die Voreinstellung)

5.16 missingok

Wenn die Logdatei nicht existiert, soll ohne weitere Fehlermeldung mit der nächsten Logdatei weitergemacht werden. Siehe auch nomissingok.

5.17 monthly

Logdateien werden rotiert, wenn logrotate das erste Mal in einem neuen Monat aufgerufen wird. Das ist normalerweise der erste Tag des Monats.

5.18 nocompress

Alte Versionen der Logdatei werden nicht komprimiert. Siehe auch compress

5.19 nocopytruncate

Die Orginal-Datei wird nicht abgeschnitten, nachdem eine Kopie erstellt wurde. Diese Direktive überschreibt copytruncate

5.20 nocreate

Neue Logdateien werden nicht angelegt. Diese Direktive überschreibt create

5.21 nodelaycompress

Die Kompression der letzten Datei wird nicht auf den nächsten Rotationszyklus verschoben. Diese Direktive überschreibt delaycompress

5.22 nomail

Alte Logdateien werden nicht gemailt

5.23 nomissingok

Wenn eine Logdatei nicht existiert, wird eine Fehlermeldung erzeugt. Das ist die Voreinstellung.

5.24 noolddir

Logdateien werden in dem Verzeichnis rotiert, in dem auch das Orginal liegt. Diese Direktive überschreibt olddir

5.25 nosharedscripts

Die prerotate und postrotate Scripts werden für jede Logdatei ausgeführt, die rotiert wird. Das ist die Voreinstellung und überschreibt die sharedscripts Option.

5.26 notifempty

Leere Logdateien werden nicht rotiert. Diese Direktive überschreibt ifempty

5.27 olddir Verzeichnis

Logs werden in das angegebene Verzeichnis verschoben um sie zu rotieren. Das Verzeichnis muß sich auf dem selben physikalischen Gerät befinden, wie die Logdatei selbst. Ist diese Option angegeben, dann enden alle alten Versionen des Logfiles in dem angegebenen Verzeichnis. Diese Direktive überschreibt noolddir

5.28 postrotate/endscript

Die Zeilen zwischen postrotate und endscript (beide müssen in einer eigenen Zeile stehen) werden ausgeführt, nachdem die Logdatei rotiert wurde. Diese Anweisung darf nur innerhalb einer Logdatei-Definition stehen (nicht global).

5.29 prerotate/endscript

Die Zeilen zwischen pretrotate und endscript (beide müssen in einer eigenen Zeile stehen) werden ausgeführt, bevor die Logdatei rotiert wurde. Diese Anweisung darf nur innerhalb einer Logdatei-Definition stehen (nicht global).

5.30 rotate Anzahl

Logdateien werden Anzahl mal rotiert, bevor sie gelöscht oder gemailt werden. Wenn Anzahl 0 ist, werden alte Versionen gelöscht, anstatt rotiert.

5.31 sharedscripts

Normalerweise werden die prerotate und postrotate Scripts für jede einzelne Datei angewandt. Das heißt, ein Script wird womöglich mehrmals ausgeführt, wenn in einer Logfile-Definition mehrere Dateien oder Namensmuster (wie etwa /var/log/news/* in unserem Beispiel) angegeben wurden. Wenn sharedscripts angegeben wurde, dann werden die Scripts nur einmal ausgeführt, egal wieviele Dateien auf das Namensmuster passen. Ein Nebeneffekt dieser Anweisung ist, daß das Script auch ausgeführt wird, wenn keine Datei auf das Muster passt, also keine Dateien rotiert werden. Wenn diese Option nicht angegeben wird, werden die Scripts nur ausgeführt, wenn die Logdatei tatsächlich rotiert werden.

5.32 size Größe[M|k]

Logdateien werden rotiert, wenn sie größer als die angegebene Größe gewachsen sind. Folgt der Größenangabe ein M, so werden Megabyte angenommen, mit einem k sind Kilobyte gemeint. Also sind size 100, size 100M und size 100k alles gültige Angaben.

5.33 tabooext [+] Liste

Die aktuelle Liste der Taboo-Erweiterungen wird verändert. (Siehe die include Direktive für Informationen über die Taboo-Erweiterungen). Ist ein + vor der Liste angegeben, so werden die angegebenen Erweiterungen an die bestehende Liste angehängt, ansonsten wird die bestehende Liste durch die angegebene Liste ersetzt. Zu Beginn enthält die Taboo-Erweiterungsliste die folgenden Einträge: .rpmorig, .rpmsave, .dpkg-dist, .dpkg-old, .dpkg-new, .disabled, ,v, .swp, .rpmnew, und ~. Die Mitglieder der Liste werden durch Leerzeichen voneinander getrennt, nicht durch Kommas.

5.34 weekly

Logdateien werden rotiert, wenn der aktuelle Wochentag kleiner als der Wochentag der letzten Rotation ist, oder die letzte Rotation länger als eine Woche her ist.

6 Dateien

/etc/logrotate.conf - Voreingestellte Konfigurationsdatei
/etc/logrotate.conf - Voreingestellte Statusdatei