Otázka: Chtěl bych automaticky otočit Apache access_log a error_log soubory. Můžete vysvětlit na příkladu, jak to udělat?
Odpověď: Toho lze dosáhnout pomocí nástroje logrotate, jak je vysvětleno níže.
Přidejte následující soubor do adresáře /etc/logrotate.d.
# 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 }
Poznámka: Podívejte se na náš výukový program logrotate (s 15 příklady), který vysvětluje další podrobnosti o tom, jak používat možnosti logrotate.
Ve výše uvedeném příkladu /etc/logrotate.d/apache:
- velikost 100 M – Jakmile access_log a error_log dosáhnou 100M, budou otočeny. Můžete také použít 100k (pro Kb), 100G (pro GB). Místo velikosti můžete také otáčet protokoly Apache pomocí frekvence (denně, týdně, měsíčně).
- komprimovat – Označuje, že rotovaný soubor protokolu bude komprimován. Ve výchozím nastavení to používá gzip. Otočený soubor tedy bude mít příponu .gz.
- dateext – Připojí datum ve formátu RRRRMMDD k otočeným souborům protokolu. tj. namísto access_log.1.gz vytvoří access_log-20110616.gz
- maxage – Označuje, jak dlouho by se měly uchovávat otočené soubory protokolu. V tomto příkladu bude uchován po dobu 30 dnů.
- postrotate a endscript – Veškeré příkazy uzavřené mezi těmito dvěma parametry budou provedeny po otočení protokolu.
Důležité: Jakmile otočíte soubory protokolu, chcete, aby apache zapisoval nové zprávy protokolu do nově vytvořených access_log a error_log. Takže musíte poslat signál HUP do Apache, jak je znázorněno zde. Ujistěte se, že jste provedli /usr/bin/killall -HUP httpd, který restartuje apache po otočení souborů protokolu (Přečtěte si více o kill).
Také si můžete chtít poslat e-mail s oznámením, že soubor protokolu je otočen, spolu s výstupem příkazu ls -ltr jako tělem e-mailu. tj. Přidejte následující mezi možnost „postrotate“ a „endscript“ (za příkaz killall).
ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache restarted and log files rotated" [email protected]
Každý den se spouští skript /etc/cron.daily/logrotate, který provede rotaci protokolů všech souborů, jak je uvedeno v /etc/logrotate.conf a všech souborů v adresáři /etc/logrotate.d.
Po přidání výše uvedeného souboru /etc/logrotate.d/apache můžete pro účely testování ručně zavolat skript logrotate, jak je uvedeno níže.
# /etc/cron.daily/logrotate
Jakmile se soubory protokolu otočí, ověřte je pomocí příkazu ls. Jak jsme vysvětlili výše, rotované soubory protokolu budou uchovávány po dobu 30 dnů.
# ls /usr/local/apache2/logs access_log error_log access_log-20110716.gz error_log-20110716.gz