¿Cómo maneja logrotate exactamente "diariamente"?

30

A juzgar por las marcas de tiempo en mis sistemas, logrotate realiza su rotación diaria de registros cuando cronr ejecuta logrotate. Sin embargo, si lo ejecuto antes de eso, no gira los archivos. ¿Cómo sabe logrotate si debe rotarlos o no? ¿Mantiene un historial o tal vez usa marcas de tiempo?

Kyle Brandt
fuente

Respuestas:

32

Creo que es el contenido del archivo de estado, que es mi caso /var/lib/logrotate.status. Cada archivo tiene una línea, que es la fecha en la que se giró por última vez; si ejecuta logrotate en una fecha tal que un archivo dado debe ser rotado, dada la cantidad de días entre la fecha actual y la fecha en el archivo (1 para diario, 7 para semanal, etc.), el archivo se rotará.

logrotate no parece importarle a qué hora del día se ejecuta; incluso si generalmente se ejecuta a las 2355, si se ejecutara a las 0130 en su lugar, todavía rotaría los archivos marcados diariamente y la última vez que se realizó ayer; pero al hacerlo, colocaría la fecha de hoy en el archivo de estado (contra cualquier archivo rotado), por lo que una segunda ejecución a las 23.55 no haría nada.

MadHatter apoya a Monica
fuente
1
Hmm .. Entonces solo gira si: fecha actual> fecha en /var/lib/logrotate/status(como el archivo es en mi caso).
Kyle Brandt el
2
Creo que solo hace algo si han pasado 24 horas desde la última vez que se ejecutó, lo que funciona al examinar el tiempo del archivo de estado. Una vez que se decide que ha pasado un día entero y que legalmente puede hacer cualquier cosa, toma decisiones DIARIAS, SEMANALES, etc., basadas en los campos de fecha dentro del archivo.
MadHatter apoya a Monica el
44
Bueno, parece usar la fecha en ese archivo. Un día puse el día en el archivo de estado y lo ejecuté ... rotó ...
Kyle Brandt
Acabo de regresar y presioné mi logrotate, creo que estaba equivocado y lo que escribes arriba es correcto. Decide si ya se ha ejecutado hoy mirando la marca de tiempo del archivo de estado; Si no es así, procede a extraer las fechas de la última rotación del archivo de estado y actúa en consecuencia. Solo mentí para rotar con vi y tocar -t para persuadirlo de que corría por última vez a las 2355 de ayer, cuando rotó mis registros munin. Ejecutarlo nuevamente, a pesar de que han pasado menos de 24 horas, los rotó y actualizó el archivo de estado en consecuencia.
MadHatter apoya a Monica el
He actualizado mi respuesta a mi comprensión actual, dado el conjunto de pruebas que acabo de ejecutar (cortando mis registros munin ocho maneras desde el domingo, ¡pero a quién le importa!).
MadHatter apoya a Monica el
11

Desde la página de manual logrotate:

Normalmente, logrotate se ejecuta como un trabajo cron diario. No modificará un registro más de una vez en un día a menos que el criterio para ese registro se base en el tamaño del registro y logrotate se ejecute más de una vez al día, o a menos que se use la opción -f o -force.

sebthebert
fuente
1
para ver cuándo se ejecuta cron.daily, vaya aquí .
Trevor Boyd Smith