Was ist logrotate?
Logrotate “rotiert, komprimiert und mailt Systemlogs. Dadurch existiert nur eine begrenzte Anzahl an Logfiles. Jeden Monat z.B. wird das älteste Logfile gelöscht und dafür ein neues angelegt. Der Vorteil darin: Logfiles werden nicht zu groß (und unhandlich). Die Festplatten werden damit auch davor bewahrt still und heimlich voll zu laufen, weil der Admin mal wieder vergessen hat Logfiles von vor 5 Jahren zu löschen.
Das Configfile:
In der Regel ist die Konfigurationsdatei unter dem Pfad “/etc/logrotate.conf” anzutreffen.
Hier der Inhalt:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
# system-specific logs may be configured here
Definiert werden Defaultwerte. Die englischen Kommentare sollten selbsterklärend sein.
Installation von Logrotate:
Logrotate legt einen Cronjob an (/etc/cron.daily). Dieser wird einmal in der Nacht ausgeführt.
Unter Debian (lenny):
Über das APT lässt sich logrotate ohne Probleme installieren. Hier reicht folgender Code aus:
sudo apt-get install logrotate
Unter CentOS (5.5):
sudo yum install logrotate
Eigene Pakete erstellen:
Eigene Pakete zu erstellen ist sehr einfach. Es muss lediglich eine Datei unter /etc/logrotate.d/ abgelegt werden.
Ein Paket ist sehr einfach Aufgebaut. In dem Manual sind verschiedene Beispiele und Optionen aufgeführt:
# sample logrotate configuration file
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
/var/log/news/news.crit {
monthly
rotate 2
olddir /var/log/news/old
missingok
postrotate
kill -HUP `cat /var/run/inn.pid`
endscript
nocompress
}
Die Logfiles, welche rotiert werden sollen, werden mit Pfadangabe und Regular Expression angegeben. Die Optionen dazu folgen dann in geschweiften Klammern ({ & }). Dabei muss darauf geachtet werden, alte, schon rotierte Logfiles nicht wieder mit zu rotieren (dadurch können sich Endlosschleifen bilden).
Ein Beispiel:
“/var/log/apache2/*” nimmt alle Logfiles. Auch die schon rotierten Logfiles (log.1). Korrekt währe “/var/log/apache2/*.log” um alle alten Logfiles auszuschließen.
Optionen:
Hier ein paar oft genutzte Funktionen für logrotate:
compress:
Alte Logfiles werden mit gzip komprimiert. (Siehe auch nocompress, compresscmd)
compresscmd:
Definiert, mit was Logfiles komprimiert werden sollen (Default: gzip).
compressext:
Definiert die Endung des Komprimierten Logfiles (Default: .gz).
create (mode owner group):
Erstellt ein neues Logfile, nachdem das alte rotiert wurde. Mode gibt die Rechte der Datei mit Oktalem Wert an (wie chmod). Owner und Group gibt User und Gruppenzugehörigkeit an.
Diese Option kann mit der Option nocreate deaktiviert werden.
daily
Logfiles werden Täglich rotiert.
Siehe auch: monthly, weekly
monthly
Rotiert die Logfiles jeden Monat
weekly
Rotiert die Logfiles jede Woche
rotate (count)
Rotiert Logfiles “count” (Dezimal) oft. Mit “rotate 6″ werden Logfiles also 6x Rotiert bevor das älteste dann gelöscht wird.
