logrotate: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
<b>logrotate</b> steuert die Rotation von [[Logging|Logdateien]].
<b>logrotate</b> steuert die Rotation von [[Protokolldateien]].


Logdateien finden sich vor allem im Verzeichnis "/var/log".
Ein Linux-System löscht eine Protokolldatei normalerweise nicht einfach, sondern rotiert sie. Dazu wird eine Datei "xxx.log" zuerst in "xxx.log.0" (oder ähnlich) umbenannt.  Das ist notwendig, weil das automatische Aufräumprogramm nicht weiss, ob und welche anderen Prozesse die Protokolldatei gerade geöffnet haben. Mit dem Öffnen einer Datei hat ein Prozess nämlich ein Dateihandle auf genau diese Datei erhalten und schreibt immer in sie - gleichgültig ob ein anderer Prozess sie zwischenzeitlich umbenannt oder sogar gelöscht hat.


Ein Linux-System löscht eine Logdatei normalerweise nicht einfach, sondern rotiert sie. Dazu wird eine Datei "xxx.log" zuerst in "xxx.log.0" (oder ähnlich) umbenannt.  Das ist notwendig, weil das automatische Aufräumprogramm nicht weiss, ob und welche anderen Prozesse die Logdatei gerade geöffnet haben. Mit dem Öffnen einer Datei hat ein Prozess nämlich ein Dateihandle auf genau diese Datei erhalten und schreibt immer in sie - gleichgültig ob ein anderer Prozess sie zwischenzeitlich umbenannt oder sogar gelöscht hat.
Nach dem Umbenennen sollte das automatische Aufräumprogramm die Protokolldateien deshalb neu (leer) anlegen und danach alle Prozesse informieren, dass sich die Protokolldateien geändert haben. Die schreibenden Prozesse müssen daraufhin ihre jeweiligen Protokolldateien schliessen (die Dateihandles aufgeben) und neu öffnen, worauf sie die aktuelle (noch leere) Version der Datei erhalten und füllen dürfen.


Nach dem Umbenennen sollte das automatische Aufräumprogramm die Logdateien deshalb neu (leer) anlegen und danach alle Prozesse informieren, dass sich die Protokolldateien geändert haben. Die schreibenden Prozesse müssen daraufhin ihre jeweiligen Logdateien schliessen (die Dateihandles aufgeben) und neu öffnen, worauf sie die aktuelle (noch leere) Version der Datei erhalten und füllen dürfen.
Daneben gibt es noch eine andere Strategie ("copytruncate"). Bei ihr wird die alte Protokolldatei zuerst ebenfalls für die Archivierung kopiert, danach allerdings nicht gelöscht, sondern auf die Länge null gekürzt. So ändert sich das Dateihandle für den loggenden Prozess nicht, er muss also weder benachrichtigt werden, noch muss er eine neue, leere Datei anlegen.


Daneben gibt es noch eine andere Strategie ("copytruncate"). Bei ihr wird die alte Logdatei zuerst ebenfalls für die Archivierung kopiert, danach allerdings nicht gelöscht, sondern auf die Länge null gekürzt. So ändert sich das Dateihandle für den loggenden Prozess nicht, er muss also weder benachrichtigt werden, noch muss er eine neue, leere Datei anlegen.
logrotate ist unter [[Linux]] und [[Freebsd]] weit verbreitet. Bei [[Debian]] dagegen kümmert sich das Sys(k)log-Paket in einem eigenen über Cron aufgerufenen Skript um die Rotation der alten Protokolldateien.
 
logrotate ist unter [[Linux]] und [[Freebsd]] weit verbreitet. Bei [[Debian]] dagegen kümmert sich das Sys(k)log-Paket in einem eigenen über Cron aufgerufenen Skript um die Rotation der alten Logdateien.


== Konfiguration ==
== Konfiguration ==
Zeile 15: Zeile 13:
logrotate benutzt eine modulare Konfiguration. Die Kernvariablen setzt die zentrale Konfigurationsdatei "/etc/logrotate.conf", welche vermerkt, wie oft Dateien rotiert werden sollen, wie lange die alten Protokolle aufbewahrt werden sollen, ob sie komprimiert werden sollen usw.
logrotate benutzt eine modulare Konfiguration. Die Kernvariablen setzt die zentrale Konfigurationsdatei "/etc/logrotate.conf", welche vermerkt, wie oft Dateien rotiert werden sollen, wie lange die alten Protokolle aufbewahrt werden sollen, ob sie komprimiert werden sollen usw.


Zusätzlich darf jedes installierte Softwarepaket bei seiner Installation einen Eintrag in die Konfigurationsdatei von logrotate machen - allerdings nicht in die zentrale Konfigurationsdatei "/etc/logrotate.conf", sondern ins Verzeichnis "/etc/logrotate.d". Dort hinein schreiben Pakete ihre Konfigurationsdatei mit dem Namen des jeweiligen Pakets. In dieser Datei steht dann auch, was zu tun ist, wenn die Logdatei rotiert ist. Für die Paketverwaltungssoftware dpkg heisst die Konfigurationsdatei also beispielsweise "/etc/logrotate.d/dpkg".
Zusätzlich darf jedes installierte Softwarepaket bei seiner Installation einen Eintrag in die Konfigurationsdatei von logrotate machen - allerdings nicht in die zentrale Konfigurationsdatei "/etc/logrotate.conf", sondern ins Verzeichnis "/etc/logrotate.d". Dort hinein schreiben Pakete ihre Konfigurationsdatei mit dem Namen des jeweiligen Pakets. In dieser Datei steht dann auch, was zu tun ist, wenn die Protokolldatei rotiert ist. Für die Paketverwaltungssoftware dpkg heisst die Konfigurationsdatei also beispielsweise "/etc/logrotate.d/dpkg".


=== Beispiel "/etc/logrotate.conf" ===
=== Beispiel "/etc/logrotate.conf" ===


  weekly                    # wöchentliche Rotation
  weekly                    # wöchentliche Rotation
  rotate 4                  # es werden 4 Vorversionen aufbewahrt
  rotate 4                  # Es werden 4 Vorversionen aufbewahrt.
  create                    # nach der Rotation wird eine neue (leere) Logdatei angelegt
  create                    # Nach der Rotation wird eine neue (leere)
  compress                  # Kompression der Vorversion der rotierten Logdatei
                          # Protokolldatei angelegt.
  compress                  # Kompression der Vorversion der rotierten
                          # Protokolldatei.
   
   
  include /etc/logrotate.d  # Pakete schreiben ihre Roationsinformationen ins Verzeichnis "/etc/logrotate.d".
  include /etc/logrotate.d  # Pakete schreiben ihre Roationsinformationen ins  
                           # include ignoriert dabei alle Backupdateien von Editoren, Dateien von
                          # Verzeichnis "/etc/logrotate.d". include ignoriert
                           # Versionskontrollsystemen, Reste der Arbeit von Paketmanagern (etwa
                           # dabei alle Backupdateien von Editoren, Dateien von
                          # "*.rpmsave" oder "*.dpkg-old") sowie Dateien mit der Endung ".disabled".
                           # Versionskontrollsystemen, Reste der Arbeit von  
                          # Paketmanagern (etwa "*.rpmsave" oder "*.dpkg-old")
                          # sowie Dateien mit der Endung ".disabled".
   
   
  /var/log/wtmp {          # konkrete Datei (wtmp), die logrotate verwalten soll
  /var/log/wtmp {          # konkrete Datei (wtmp), die logrotate verwalten soll
   missingok
   missingok
   monthly                  # monatliche Rotation (abweichend vom Standard)
   monthly                  # monatliche Rotation (abweichend vom Standard)
   create 0664 root utmp    # die neu angelegte Datei wird Benutzer "root" und Gruppe "utmp" übereignet
   create 0664 root utmp    # die neu angelegte Datei wird Benutzer "root" und
                            # Gruppe "utmp" übereignet
   rotate 1                  # es wird nur 1 Vorversion aufbewahrt
   rotate 1                  # es wird nur 1 Vorversion aufbewahrt
  }
  }
Zeile 38: Zeile 41:
=== Beispiel "/etc/logrotate.d/apache2" ===
=== Beispiel "/etc/logrotate.d/apache2" ===


Besondere Optionen für die Rotation der Apache-Logdateien. Zuerst gelten für alle Dateien im Verzeichnis "/var/log/apache2/" die Voreinstellungen aus der zentralen Konfigurationsdatei "/etc/logrotate.conf": die Logdateien werden also wöchentlich rotiert, nach einer weiteren Woche komprimiert und nach der Rotation neu angelegt.
Besondere Optionen für die Rotation der Protokolldateien des Apache HTTP Server. Zuerst gelten für alle Dateien im Verzeichnis "/var/log/apache2/" die Voreinstellungen aus der zentralen Konfigurationsdatei "/etc/logrotate.conf": die Protokolldateien werden also wöchentlich rotiert, nach einer weiteren Woche komprimiert und nach der Rotation neu angelegt.
<pre class=wiki>
 
/var/log/apache2/*.log {  # Pfadangabe der Logdateien
/var/log/apache2/*.log {  # Pfadangabe der Protokolldateien
  missingok
  missingok
  rotate 52              # es werden 52 Vorversionen aufbewahrt
  rotate 52              # Es werden 52 Vorversionen aufbewahrt.
  notifempty              # wenn Apache mal aus einem Grund gar nicht starten will und darum keine Logdatei
  notifempty              # Wenn Apache mal aus einem Grund gar nicht starten
                          # anlegt, so wird auch nicht rotiert
                          # will und darum keine Protokolldatei anlegt, so wird
  create 640 root adm    # die neu angelegte Datei wird Benutzer "root" und Gruppe "adm" übereignet
                          # auch nicht rotiert.
  sharedscripts          # logrotate ruft das (nach "postrotate") folgende Skript nur einmal auf, auch wenn
  create 640 root adm    # Die neu angelegte Datei wird Benutzer "root" und  
                          # mehrere Logdateien (normalerweise mindestens ein Access- und ein Error-Log) rotieren.
                          # der Gruppe "adm" übereignet.
                          # Es wird gestartet, sobald die Rotation aller Logdateien abgeschlossen ist.
  sharedscripts          # logrotate ruft das (nach "postrotate") folgende  
  postrotate              # Art, wie Apache über die erfolgte Rotation informiert wird. In diesem Falle:
                          # Skript nur einmal auf, auch wenn mehrere Protokoll-
                          # Falls Apache läuft (also seine PID-Datei vorhanden ist) wird er durch das zugehörige
                          # dateien (normalerweise mindestens ein Access- und  
                          # init-Skript neu gestartet
                          # ein Error-Protokoll) rotieren. Es wird gestartet,  
    if [ -f /var/run/apache2.pid ]; then
                          # sobald die Rotation aller Protokolldateien
      /etc/init.d/apache2 restart > /dev/null
                          # abgeschlossen ist.
    fi
  postrotate              # Die Art, wie Apache über die erfolgte Rotation  
  endscript
                          # informiert wird. In diesem Falle: Falls Apache läuft
}
                          # (also seine PID-Datei vorhanden ist) wird er durch
</pre>
                          # das zugehörige init-Skript neu gestartet.
    if [ -f /var/run/apache2.pid ]; then
      /etc/init.d/apache2 restart > /dev/null
    fi
  endscript
}




{{cat|Logging}}
{{cat|Protokollierung}}
{{cat|Systemverwaltung}}
{{cat|Systemverwaltung}}

Aktuelle Version vom 6. August 2011, 16:52 Uhr

logrotate steuert die Rotation von Protokolldateien.

Ein Linux-System löscht eine Protokolldatei normalerweise nicht einfach, sondern rotiert sie. Dazu wird eine Datei "xxx.log" zuerst in "xxx.log.0" (oder ähnlich) umbenannt. Das ist notwendig, weil das automatische Aufräumprogramm nicht weiss, ob und welche anderen Prozesse die Protokolldatei gerade geöffnet haben. Mit dem Öffnen einer Datei hat ein Prozess nämlich ein Dateihandle auf genau diese Datei erhalten und schreibt immer in sie - gleichgültig ob ein anderer Prozess sie zwischenzeitlich umbenannt oder sogar gelöscht hat.

Nach dem Umbenennen sollte das automatische Aufräumprogramm die Protokolldateien deshalb neu (leer) anlegen und danach alle Prozesse informieren, dass sich die Protokolldateien geändert haben. Die schreibenden Prozesse müssen daraufhin ihre jeweiligen Protokolldateien schliessen (die Dateihandles aufgeben) und neu öffnen, worauf sie die aktuelle (noch leere) Version der Datei erhalten und füllen dürfen.

Daneben gibt es noch eine andere Strategie ("copytruncate"). Bei ihr wird die alte Protokolldatei zuerst ebenfalls für die Archivierung kopiert, danach allerdings nicht gelöscht, sondern auf die Länge null gekürzt. So ändert sich das Dateihandle für den loggenden Prozess nicht, er muss also weder benachrichtigt werden, noch muss er eine neue, leere Datei anlegen.

logrotate ist unter Linux und Freebsd weit verbreitet. Bei Debian dagegen kümmert sich das Sys(k)log-Paket in einem eigenen über Cron aufgerufenen Skript um die Rotation der alten Protokolldateien.

Konfiguration

logrotate benutzt eine modulare Konfiguration. Die Kernvariablen setzt die zentrale Konfigurationsdatei "/etc/logrotate.conf", welche vermerkt, wie oft Dateien rotiert werden sollen, wie lange die alten Protokolle aufbewahrt werden sollen, ob sie komprimiert werden sollen usw.

Zusätzlich darf jedes installierte Softwarepaket bei seiner Installation einen Eintrag in die Konfigurationsdatei von logrotate machen - allerdings nicht in die zentrale Konfigurationsdatei "/etc/logrotate.conf", sondern ins Verzeichnis "/etc/logrotate.d". Dort hinein schreiben Pakete ihre Konfigurationsdatei mit dem Namen des jeweiligen Pakets. In dieser Datei steht dann auch, was zu tun ist, wenn die Protokolldatei rotiert ist. Für die Paketverwaltungssoftware dpkg heisst die Konfigurationsdatei also beispielsweise "/etc/logrotate.d/dpkg".

Beispiel "/etc/logrotate.conf"

weekly                    # wöchentliche Rotation
rotate 4                  # Es werden 4 Vorversionen aufbewahrt.
create                    # Nach der Rotation wird eine neue (leere)
                          # Protokolldatei angelegt.
compress                  # Kompression der Vorversion der rotierten
                          # Protokolldatei.

include /etc/logrotate.d  # Pakete schreiben ihre Roationsinformationen ins 
                          # Verzeichnis "/etc/logrotate.d". include ignoriert
                          # dabei alle Backupdateien von Editoren, Dateien von
                          # Versionskontrollsystemen, Reste der Arbeit von 
                          # Paketmanagern (etwa "*.rpmsave" oder "*.dpkg-old")
                          # sowie Dateien mit der Endung ".disabled".

/var/log/wtmp {           # konkrete Datei (wtmp), die logrotate verwalten soll
  missingok
  monthly                   # monatliche Rotation (abweichend vom Standard)
  create 0664 root utmp     # die neu angelegte Datei wird Benutzer "root" und
                            # Gruppe "utmp" übereignet
  rotate 1                  # es wird nur 1 Vorversion aufbewahrt
}

Beispiel "/etc/logrotate.d/apache2"

Besondere Optionen für die Rotation der Protokolldateien des Apache HTTP Server. Zuerst gelten für alle Dateien im Verzeichnis "/var/log/apache2/" die Voreinstellungen aus der zentralen Konfigurationsdatei "/etc/logrotate.conf": die Protokolldateien werden also wöchentlich rotiert, nach einer weiteren Woche komprimiert und nach der Rotation neu angelegt.

/var/log/apache2/*.log {  # Pfadangabe der Protokolldateien
  missingok
  rotate 52               # Es werden 52 Vorversionen aufbewahrt.
  notifempty              # Wenn Apache mal aus einem Grund gar nicht starten
                          # will und darum keine Protokolldatei anlegt, so wird
                          # auch nicht rotiert.
  create 640 root adm     # Die neu angelegte Datei wird Benutzer "root" und 
                          # der Gruppe "adm" übereignet.
  sharedscripts           # logrotate ruft das (nach "postrotate") folgende 
                          # Skript nur einmal auf, auch wenn mehrere Protokoll-
                          # dateien (normalerweise mindestens ein Access- und 
                          # ein Error-Protokoll) rotieren. Es wird gestartet, 
                          # sobald die Rotation aller Protokolldateien
                          # abgeschlossen ist.
  postrotate              # Die Art, wie Apache über die erfolgte Rotation 
                          # informiert wird. In diesem Falle: Falls Apache läuft
                          # (also seine PID-Datei vorhanden ist) wird er durch
                          # das zugehörige init-Skript neu gestartet.
    if [ -f /var/run/apache2.pid ]; then
      /etc/init.d/apache2 restart > /dev/null
    fi
  endscript
}