Podemos encontrar en Internet multitud de artÃculos explicando como configurar logrotate y todas las opciones disponibles, pero en muy pocos sitios explican en que se basa logrotate para determinar cuando es cada hora o cada dÃa, cada dÃa es a las 00:00, a las 10:30?. En este artÃculo despejaremos todas estas dudas y como cambiar estos momentos.
Logrotate se apoya en cron para ejecutar las tareas programadas, cada 10min se ejecuta run-crons, cada 10min se comprueba si hay algo crontabeado para ser ejecutado cada hora, dÃa, semana, mes:
*/10 * * * * root test -x /usr/sbin/run-crons && /usr/sbin/run-crons
Este script se encarga de ejecutar crones cada hora, dÃa, semana, mes:
for BASE in hourly daily weekly monthly ; do
CRONDIR=/etc/cron.${BASE}
for SCRIPT in $CRONDIR/* ; do
Cada hora, dÃa, semana, mes, se ejecuta /usr/sbin/logrotate /etc/logrotate.conf, en este ejemplo mostramos la ejecución diaria:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Logrotate mira la config de cada cuanto debe rotar cada fichero y en base a /var/lib/logrotate.status conoce la última vez que se rotó, según esta información procede a rotar o no:
logrotate state -- version 2
"/var/log/filelog1" 2017-6-9-3:10:1
"/var/log/filelog2" 2017-5-18-3:10:1
"/var/log/filelog3" 2017-6-1-3:10:2
NOTA: En algunos sistemas puede estar en /var/lib/misc/logrotate.status
Podemos apreciar como la hora de rotación coincide con la guardada en el fichero /var/lib/logrotate.status.
-rw-rw-r-- 1 root root 94015881 jun 9 10:18 /var/log/filelog1
-rw-rw-r-- 1 root root 471797517 abr 26 03:10 /var/log/filelog1-20170426
-rw-rw-r-- 1 root root 517655380 abr 27 03:10 /var/log/filelog1-20170427
-rw-rw-r-- 1 root root 500113058 abr 28 03:10 /var/log/filelog1-20170428
Si nos interesa que un fichero se rote a otra hora tan solo deberÃamos de editar el fichero: /var/lib/logrotate.status
Como resumen rápido, cada 10min se intentam rotar todos los ficheros configurados en logrotate y se hace solo si la fecha de la última rotación en /var/lib/logrotate.status lo permite.