Frage: Ich möchte das Apache access_log automatisch rotieren lassen und error_log Dateien. Können Sie anhand eines Beispiels erklären, wie das geht?
Antwort: Dies kann mit dem Dienstprogramm logrotate wie unten beschrieben erreicht werden.
Fügen Sie die folgende Datei zum Verzeichnis /etc/logrotate.d hinzu.
# vi /etc/logrotate.d/apache /usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log { size 100M compress dateext maxage 30 postrotate /usr/bin/killall -HUP httpd ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache restarted and log files rotated" [email protected] endscript }
Hinweis: Weitere Informationen zur Verwendung der Logrotate-Optionen finden Sie in unserem Logrotate-Tutorial (mit 15 Beispielen).
Im obigen Beispiel /etc/logrotate.d/apache:
- Größe 100M – Sobald access_log und error_log 100 MB erreichen, werden sie rotiert. Sie können auch 100k (für Kb), 100G (für GB) verwenden. Anstelle der Größe können Sie Apache-Protokolle auch anhand der Häufigkeit rotieren (täglich, wöchentlich, monatlich).
- komprimieren – Gibt an, dass die rotierte Protokolldatei komprimiert wird. Standardmäßig wird dabei gzip verwendet. Die gedrehte Datei hat also die Erweiterung .gz.
- Datumstext – Fügt das Datum im Format JJJJMMTT an die rotierten Protokolldateien an. d.h. Anstelle von access_log.1.gz wird access_log-20110616.gz erstellt
- maxage – Gibt an, wie lange die rotierten Protokolldateien aufbewahrt werden sollen. In diesem Beispiel wird es 30 Tage lang aufbewahrt.
- postrotate und endscript – Alle zwischen diesen beiden Parametern eingeschlossenen Befehle werden ausgeführt, nachdem das Protokoll rotiert wurde.
Wichtig: Sobald Sie die Protokolldateien rotieren, möchten Sie, dass Apache die neuen Protokollmeldungen in das neu erstellte access_log und error_log schreibt. Sie müssen also das HUP-Signal wie hier gezeigt an den Apache senden. Stellen Sie sicher, dass /usr/bin/killall -HUP httpd ausgeführt wird, wodurch der Apache nach dem Rotieren der Protokolldateien neu gestartet wird (Lesen Sie mehr über kill).
Außerdem möchten Sie möglicherweise eine E-Mail an sich selbst senden, in der angegeben wird, dass die Protokolldatei rotiert wird, zusammen mit der Ausgabe des Befehls ls -ltr als Hauptteil der E-Mail. D.h. fügen Sie Folgendes zwischen der Option „postrotate“ und „endscript“ hinzu (nach dem killall-Befehl).
ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache restarted and log files rotated" [email protected]
Das Skript /etc/cron.daily/logrotate wird jeden Tag ausgeführt und führt eine Protokollrotation aller Dateien aus, die in /etc/logrotate.conf und allen Dateien im Verzeichnis /etc/logrotate.d angegeben sind.
Nachdem Sie die obige Datei /etc/logrotate.d/apache zu Testzwecken hinzugefügt haben, können Sie das logrotate-Skript wie unten gezeigt manuell aufrufen.
# /etc/cron.daily/logrotate
Sobald die Protokolldateien rotiert sind, führen Sie einen ls aus, um sie zu überprüfen. Wie oben erläutert, werden die rotierten Protokolldateien 30 Tage lang aufbewahrt.
# ls /usr/local/apache2/logs access_log error_log access_log-20110716.gz error_log-20110716.gz