Logrotate
Come suggerisce il nome stesso, logrotate e’ un’applicazione che si occupa di ruotare i file di log. L’archiviazione puo’ avvenire in base alla dimensione oppure con criteri temporali. Per salvaguardare l’occupazione di spazio disco, i file ruotati possono essere compressi.
Diamo un’occhiata al file di configurazione (/etc/logrotate.conf):
weekly
rotate 4
create
#compress
include /etc/logrotate.d
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
La prima riga (weekly) indica che i file vengono ruotati settimanalmente. Si possono archiviare giornalmente, settimanalmente o mensilmente (daily, weekly, montly).La seconda direttiva (rotate) viene utilizzata per configurare logrotate in modo tale da conservare 4 file per log (quindi l’originale + 3 ruotati). La parola ‘create’ serve per far generare un nuovo file vuoto dopo la rotazione del dato originale. Con l’opzione ‘compress’ e’ possibile comprimere i log. La direttiva “include” permette a logrotate di includere e processare altre configurazioni (scritte dalle applicazioni installate sul server come ad esempio apache, mysql, ecc.):
ls -al /etc/logrotate.d/
total 48
drwxr-xr-x 2 root root 4096 2009-09-21 12:33 .
drwxr-xr-x 106 root root 4096 2009-09-21 18:59 ..
-rw-r–r– 1 root root 303 2009-09-21 12:33 apache2
-rw-r–r– 1 root root 84 2008-10-11 07:09 apt
-rw-r–r– 1 root root 79 2008-10-26 22:04 aptitude
-rw-r–r– 1 root root 111 2008-09-05 17:52 dpkg
-rw-r–r– 1 root root 151 2007-09-29 13:23 iptraf
-rw-r–r– 1 root root 74 2008-07-05 02:09 mrtg
-rw-r–r– 1 root root 837 2009-04-19 03:12 mysql-server
-rw-r–r– 1 root root 417 2008-07-07 22:43 privoxy
-rw-r–r– 1 root root 515 2008-08-14 02:21 rsyslog
-rw-r–r– 1 root root 190 2009-01-23 12:53 tor
Ci sono poi le istruzioni su come ruotare due file “/var/log/wtmp” e “/var/log/btmp”. La direttiva “missingok” serve per non far generare messaggi di errore e passare al prossimo log se il file da ruotare non e’ presente sulla macchina. I parametri di “create” indicano i permessi, il proprietario ed il gruppo del nuovo file creato.
Vediamo adesso il contenuto del file /etc/logrotate.d/apache2 generato al momento dell’installazione del server web:
/var/log/apache2/*.log {
weekly
missingok
rotate 4
size 250M
compress
delaycompress
create 640 root adm
sharedscripts
postrotate
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}
In questo caso la rotazione avviene solamente se il file e’ di dimensioni di almeno 250Mb (il controllo avviene settimanalmente). “delaycompress” serve per far comprimere il log non alla prima rotazione ma alla seconda, in modo tale se ci sono programmi che stanno ancora scrivendo nel file non ci saranno problemi. “postrotate” fa eseguire un comando dopo la rotazione del log e “sharedscripts” serve per far eseguire questo comando solamente una volta ed e’ utile se, come nel nostro esempio, vengono ruotati piu’ di un file (/var/log/apache2/*.log)
Vediamo infine la struttura di una directory che contiene i file ruotati con logrotate:
ls -al /var/log/apache2/
total 168408
drwxr-x— 2 root adm 4096 Sep 20 06:25 ./
drwxr-xr-x 8 root root 4096 Sep 20 06:25 ../
-rw-r—– 1 root adm 0 Jan 18 2009 access.log
-rw-r—– 1 root adm 372 Jan 14 2009 access.log.1
-rw-r—– 1 root adm 1113 Jan 11 2009 access.log.2.gz
-rw-r—– 1 root adm 26408652 Sep 22 23:43 error.log
-rw-r—– 1 root adm 63336636 Sep 20 06:25 error.log.1
-rw-r—– 1 root adm 2162127 Sep 13 06:25 error.log.2.gz
-rw-r—– 1 root adm 2102370 Sep 6 06:25 error.log.3.gz
-rw-r—– 1 root adm 2077211 Aug 30 06:25 error.log.4.gz
-rw-r—– 1 root adm 0 Feb 1 2009 rewrite.log
-rw-r—– 1 root adm 84275 Jan 27 2009 rewrite.log.1
-rw-r—– 1 root adm 14001 Jan 24 2009 rewrite.log.2.gz
-rw-r–r– 1 root root 3439 Jan 17 2009 rewrite.log.3.gz



Per testare la configurazione appena creata:
/usr/sbin/logrotate -v /etc/logrotate.conf
oppure in caso di file personalizzati dentro logrotate.d:
/usr/sbin/logrotate -v /etc/logrotate.d/miofile