HOWTO zum Kommando "logrotate" (Logdatei Rotation) (C) 2014-2018 T.Birnthaler/H.Gottschalk OSTC Open Source Training and Consulting GmbH http://www.ostc.de $Id: logrotate-HOWTO.txt,v 1.14 2019/11/26 19:37:07 tsbirn Exp $ Diese Dokument beschreibt die Eigenschaften und Möglichkeiten des Programms "logrotate" zum Rotieren von Logdateien auf Linux-Systemen. Für Informationen zum System-Logging-Daemon "syslog/syslog-ng/rsyslog" siehe --> syslog-HOWTO.txt ________________________________________________________________________________ INHALTSVERZEICHNIS 1) Einleitung 2) Ablauf 3) "logrotate"-Aufruf 4) Zentrale Konfigurations-Datei "/etc/logrotate.conf" 5) Lokale Konfigurations-Dateien im Verzeichnis "/etc/logrotate.d" 6) Konfigurations-Parameter 7) Beispiel-Konfiguration ________________________________________________________________________________ 1) Einleitung ------------- "logrotate" ist ein Werkzeug um Logdateien zu verwalten. Wird Logdateien keine Beachtung geschenkt, so werden sie immer größer und belegen am Ende den gesamten verfügbaren Plattenplatz. Weiterhin ist das Durchsuchen vieler/großer Logdateien zeitaufwendig. Um dies zu verhindern und Platz auf der Festplatte zu sparen, ist "logrotate" entwickelt worden. Mit "logrotate" kann man Logdateien ab einer bestimmten Größe (z.B. 1 MByte) und/oder einem bestimmten Alter (z.B. 1 Tag, 1 Woche, 1 Monat, 1 Jahr) rotieren lassen. Mit "Rotieren" ist gemeint, dass die aktuelle Logdatei und frühere Versionen von ihr umbenannt/verschoben und dabei evtl. komprimiert werden. Die aktuelle Logdatei wird geleert. Frühere Versionen der Logdatei werden dabei durchnumeriert und ggf. auch gelöscht, sobald sie ein gewisses Alter oder eine gewisse Anzahl erreichen. Beispiel zur möglichen Wirkung der Logrotation auf Datei "/var/log/auth.log": auth.log.100.gz # Löschen auth.log.N.gz --> auth.log.N+1.gz # Umbenennen (N=2..99) auth.log.1 --> auth.log.2.gz # Komprimieren + umbenennen auth.log.0 --> auth.log.1 # Umbenennen auth.log --> auth.log.0 # Umbenennen auth.log # Leer neu anlegen 2) Ablauf --------- "logrotate" wird meist periodisch per "cron" gestartet (z.B. 1x am Tag) und über die Konfigurations-Datei "/etc/logrotate.conf" gesteuert. In dieser Datei sind GLOBALE Einstellungen hinterlegt. Normalerweise enthält diese Datei auch einen Eintrag, der "logrotate" anweist, alle Konfigurations-Dateien aus dem Verz. "/etc/logrotate.d/" ebenfalls einzulesen. In den Konfigurations-Dateien sind Verz.- und Dateipfade (auch per Shell-Muster "*", "?" und "[...]") hinterlegt, die rotiert werden sollen. Entweder gelten für sie die globalen Definitionen (aus "etc/logrotate.conf") oder LOKALE Definitionen, die zusammen mit ihnen angegeben werden. Die Definitionen legen fest, auf welche Art und Weise die Logrotation der Dateien erfolgen soll. Lokale Definitionen überschreiben dabei globale, ebenso überschreiben spätere Definitionen frühere. Anschließend wird die Status-Datei "/var/lib/logrotate/status" gelesen. Dort sind Informationen hinterlegt, wann eine Datei zum letzten Mal rotiert wurde. Beim ersten "logrotate"-Aufruf wird diese Datei angelegt und alle zu bearbeitenden Logdateien erhalten das aktuelle Datum als letzten Bearbeitungszeitpunkt. Anschließend werden Logdateien nicht mehr rotiert, falls "logrotate" am gleichen Tag erneut aufgerufen wird. Um eine erneute Rotation am gleichen Tag zu erzwingen, ist das Datum nach den einzelnen Logdateien in der Statusdatei "/var/lib/logrotate/status" zu ändern oder die Option -f/--force zu benutzen. Hier ein Ausschnitt aus der Status-Datei: "/var/log/atop.log" 2016-3-29 "/var/log/atop/dummy_before" 2016-3-29 "/var/log/samba/log.smbd" 2016-3-27 "/var/log/mysql/mysql.log" 2016-3-29 3) "logrotate"-Aufruf --------------------- Der Aufruf des Programms ("root"-Rechte notwendig) lautet: logrotate [OPT] [CONFIGFILE...] Folgende Optionen OPT sind beim Aufruf möglich (ohne Konfigurations-Datei CONFIGFILE als letzter Parameter wird "/etc/logrotate.conf" verwendet): +-----------------+--------------------------------------------------------+ | Option | Bedeutung | +-----------------+--------------------------------------------------------+ | -d | Keine Änderung, nur Testlauf mit mehr Ausgaben [debug] | | | (impliziert -v/--verbose) | | -f --force | Logdateien rotieren auch falls nicht notwendig | | -m --mail CMD | Für Mailversand zu verwendendes Kommando | | | (STD: /usr/bin/mail -s "SUBJECT" "RECIPIENT" < "TEXT") | | -s --state FILE | Statusdatei FILE (STD: "/var/lib/logrotate/status") | | -v --verbose | Mehr Ausgaben erzeugen | | --usage | Kurze Hilfemeldung ausgeben | +-----------------+--------------------------------------------------------+ 4) Zentrale Konfigurations-Datei "/etc/logrotate.conf" ----------------------------------------------------- Konfigurations-Datei für die GLOBALEN Einstellungen, die standardmäßig für alle Logdateien gelten. Diese Einstellungen können für einzelne Logdateien durch LOKALE Einstellungen überschrieben werden. Die Konfiguration ist zeilenorientiert und besteht aus Schlüsselworten + evtl. einem Wert zum Schlüsselwort. Beispiel für den Inhalt von "/etc/logrotate.conf": weekly # Rotiere wöchentlich rotate 4 # 4 Versionen pro Logdatei aufheben create # Nach Rotation neue leere Logdatei erzeugen compress # Rotierte Logdateien komprimieren include /etc/logrotate.d # Alle Dateien aus Verz. ebenfalls einlesen Die zentrale Konfigurations-Datei kann auch spezielle (lokale) Definitionen zum Rotieren einzelner Logdateien enthalten. Nach einer Liste von Pfadnamen (durch Leerzeichen getrennt, Shell-Muster "*", "?" und "[...]" sind erlaubt) der zu rotierenden Logdateien folgen umgeben von geschweiften Klammern {...} die Logrotate-Direktiven, die für diese Dateiliste GEMEINSAM gelten sollen (und die GLOBALEN Direktiven überschreiben). /var/log/wtmp { # Zu rotierende Logdatei monthly # Monatlich rotieren rotate 1 # Nur 1 rotierte Version aufheben create 0664 root utmp # Zugriffsrechte und Besitzer(Gruppe) festlegen } Für die meisten Logdateien werden diese Definitionen aber in getrennte Konfigurations-Dateien im Unterverz. "/etc/logrotate.d" ausgelagert. 5) Lokale Konfigurations-Dateien im Verzeichnis "/etc/logrotate.d" ----------------------------------------------------------------- Die oben aufgeführte Definition für die Logdatei "/var/log/wtmp" kann auch in einer separaten Datei im Include-Verz. "/etc/logrotate.d" abgelegt werden. Der Name dieser Definitions-Datei ist beliebig wählbar, er sollte aber sinnvollerweise "wtmp" lauten, um den Zusammenhang zu verdeutlichen. /var/log/wtmp { # Zu rotierende Logdatei monthly # Monatlich rotieren rotate 1 # Nur 1 rotierte Version aufheben create 0664 root utmp # Zugriffsrechte und Besitzer(Gruppe) festlegen } Über das Include-Verz. "/etc/logrotate.d" hat man also die Möglichkeit, für jede Anwendung oder Logdatei eine EIGENE Konfiguration mit sprechendem Dateinamen zu hinterlegen. Dadurch bleibt die Konfiguration übersichtlich und änderungsfreundlich. 6) Konfigurations-Parameter --------------------------- Als GLOBALE und LOKALE Konfigurations-Parameter sind möglich: +---------------------+------------------------------------------------------+ | Direktive | Bedeutung | +---------------------+------------------------------------------------------+ | include FILE/DIR | Angegebene Konfigurations-Datei/Verz. lesen | | | (Verz. --> ALLE darin vorhandenen Dateien lesen) | +---------------------+------------------------------------------------------+ | daily | Tägliches rotieren der Logdateien. | | weekly | Wöchentliches rotieren der Logdateien | | monthly | Monatliches rotieren der Logdateien | | yearly | Jährliches rotieren der Logdateien | +---------------------+------------------------------------------------------+ | size SIZE | Logdatei rotieren wenn größer (Byte, k=kilo, M=Mega) | | maxage DAYS | Rotierte Logdateien nach Anzahl Tagen löschen | | rotate CNT | Max. CNT rotierte Logdateien aufheben | +---------------------+------------------------------------------------------+ | missingok no | Fehlende Logdatei wird ignoriert (STD) | | ifempty not | Auch leere Logdateien rotieren (STD) | | copytruncate no | Logdatei nach Kopieren abschneiden (STD: Original | | | umbenannt + neues erstellt). Falls Anwendung nicht | | | gezwungen werden kann, Logdatei zu schließen. | | | (Datenverlust möglich, "create" ohne Wirkung) | +---------------------+------------------------------------------------------+ | compress | Rotierte Logdateien packen | | delaycompress | Letzte rotierte Version nicht sofort komprimieren | | | (erst im übernächsten Rotationszyklus) | | compressext EXT | Dateinamen-Extension kompr. Dateien (STD: .gz) | | compresscmd CMD | Komprimier-Kommando (STD: gzip) | | uncompresscmd CMD | Dekomprimier-Kommando (STD: gunzip) | | compressoptions OPT | Optionen für Komprimier-Kommando (STD: LEER) | +---------------------+------------------------------------------------------+ | create MODE USR GRP | Rechte + Besitzer(-Gruppe) rot. Dateien festlegen | | dateext | Datum-Stempel statt laufende Nummer anhängen | | extension EXT | Dateinamen-Extension rotierter Dateien (STD: ?) | | | (daran ggfs. noch Komprimier-Extension angehängt) | | olddir DIR | Rot. Logdateien in DIR ablegen (identische Platte) | +---------------------+------------------------------------------------------+ | mail ADDRESS | Zu löschende Logdatei vorher mailen | | mailfirst | Neu erstellte rot. Logdatei mailen | | maillast | Zu löschende rot. Logdatei mailen (STD) | +---------------------+----+-------------------------------------------------+ | postrotate ... endscript | Kommandos ... NACH Logdatei-Rotation ausführen | | prerotate ... endscript | Kommandos ... VOR Logdatei-Rotation ausführen | | sharedscript | Skript NUR 1x für ALLE Logdateien ausführen | +---------------------+----+-------------------------------------------------+ | nocompress | Rotierte Logdateien NICHT komprimieren | | nocopytruncate | Logdatei nach Kopieren NICHT abschneiden | | nocreate | Nach Verschieben keine neue Logdatei erzeugen | | nodelaycompress | Logdatei sofort komprimieren | | nomail | Keine Logdatei als Email verschicken | | nomissingok | Fehlende Logdatei erzeugt Fehlermeldung (STD) | | noolddir | Rotierte Logdateien im gleichen Verz. ablegen | | nosharedscripts | "pre/postrotate"-Skripte PRO Logdatei (STD) | | notifempty | Leere Logdatei nicht rotieren | +---------------------+------------------------------------------------------+ HINWEIS: Die Direktiven "postrotate", "prerotate" und "endscript" müssen auf einer Zeile für sich stehen, die Zeilen dazwischen müssen gültige Kommandozeilen enthalten. 7) Beispiel-Konfiguration ------------------------- In "/etc/logrotate.conf" GLOBAL definieren: * Logdateien wöchentlich rotieren * 4 rotierte Version verfügbar halten * Neue leere Logdatei nach dem Verschieben erstellen * Rotierte Dateien komprimieren * Konfig.dateien im Verz. "/etc/logrotate.d" berücksichtigen weekly rotate 4 create compress include /etc/logrotate.d Im Verz. "/etc/logrotate.d" liegt eine Konfigurations-Datei "httpd", die folgendes festlegt: * 2 Dateien "/var/log/httpd/access.log" + ".../error.log" rotieren * 5 rotierte Versionen davon verfügbar halten * ÄLTESTE rotierte Datei vor Löschen an "log@ostc.de" mailen * Logdateien rotieren, sobald größer als 100 KB * "postrotate"-Prozedur nur 1x für die 2 Logdateien ausführen * Nach Rotieren Prozess "httpd" initialisieren (/sbin/killall -HUP httpd) "/var/log/httpd/access.log" /var/log/httpd/error.log { rotate 5 mail log@ostc.de size 100k sharedscripts postrotate /sbin/killall -HUP httpd endscript } HINWEIS: Dateinamen können Shell-Muster enthalten (KEINE Regulären Ausdrücke) und mit oder ohne Quotierung per "..." oder '...' angegeben werden. --------------------------------------------------------------------------------