Esta pagina se ve mejor con JavaScript habilitado

Logrotate y sus misterios

 ·  🎃 kr0m

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:

cat /etc/crontab

*/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:

cat /etc/cron.daily/logrotate

#!/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:

cat /var/lib/logrotate.status

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.

ls -la /var/log/filelog1*

-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.

Si te ha gustado el artículo puedes invitarme a un RedBull aquí