Domanda: Vorrei ruotare automaticamente apache access_log e registro_errori file. Puoi spiegare con un esempio come farlo?
Risposta: Questo può essere ottenuto usando l'utilità logrotate come spiegato di seguito.
Aggiungi il seguente file alla directory /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 }
Nota: Fare riferimento al nostro tutorial logrotate (con 15 esempi) che spiega maggiori dettagli su come utilizzare le opzioni logrotate.
Nell'esempio sopra /etc/logrotate.d/apache:
- taglia 100M – Una volta che access_log e error_log raggiungono i 100 milioni, verranno ruotati. Puoi anche usare 100k (per Kb), 100G (per GB). Invece delle dimensioni, puoi anche ruotare i log di Apache utilizzando la frequenza (giornaliera, settimanale, mensile).
- comprimi – Indica che il file di registro ruotato verrà compresso. Per impostazione predefinita, utilizza gzip. Quindi, il file ruotato avrà estensione .gz.
- dataext – Aggiunge la data nel formato AAAAMMGG ai file di registro ruotati. cioè invece di access_log.1.gz, crea access_log-20110616.gz
- massimo – Indica per quanto tempo devono essere conservati i file di registro ruotati. In questo esempio, verrà conservato per 30 giorni.
- postrotato e endscript – Tutti i comandi racchiusi tra questi due parametri verranno eseguiti dopo la rotazione del registro.
Importante: Dopo aver ruotato i file di registro, si desidera che Apache scriva i nuovi messaggi di registro in access_log e error_log appena creati. Quindi, devi inviare il segnale HUP ad apache come mostrato qui. Assicurati di eseguire /usr/bin/killall -HUP httpd, che riavvierà l'Apache dopo aver ruotato i file di registro (Leggi di più su kill).
Inoltre, potresti voler inviare un'e-mail a te stesso indicando che il file di registro è ruotato, insieme all'output del comando ls -ltr come corpo dell'e-mail. cioè aggiungi quanto segue tra l'opzione "postrotate" e "endscript" (dopo il comando killall).
ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache restarted and log files rotated" [email protected]
Lo script /etc/cron.daily/logrotate viene eseguito ogni giorno ed eseguirà la rotazione del registro di tutti i file come specificato nella directory /etc/logrotate.conf e di tutti i file nella directory /etc/logrotate.d.
Dopo aver aggiunto il file /etc/logrotate.d/apache sopra, a scopo di test, puoi chiamare manualmente lo script logrotate come mostrato di seguito.
# /etc/cron.daily/logrotate
Una volta ruotati i file di registro, eseguire una ls per verificarli. Come spiegato in precedenza, i file di registro ruotati verranno conservati per 30 giorni.
# ls /usr/local/apache2/logs access_log error_log access_log-20110716.gz error_log-20110716.gz