Solución 1:
Agregando delaycompress
a la sección de configuración para /var/log/messages
resolvió el problema.
Desde man logrotate
:
delaycompress
Postpone compression of the previous log file to the next rota‐
tion cycle. This only has effect when used in combination with
compress. It can be used when some program cannot be told to
close its logfile and thus might continue writing to the previ‐
ous log file for some time.
Supongo que sysklogd
, mi demonio syslog, no puede cerrar su archivo de registro y, por lo tanto, esto es necesario.
Curiosamente, la configuración original que tenía (sin el delaycompress
directiva), salió directamente de man logrotate
(excepto que cambié weekly
a daily
):
# sample logrotate configuration file
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
Solución 2:
Es difícil saberlo solo con esta información, pero puedo contarte lo que me ha salvado varias veces.
Logrotate tiene una opción de depuración que imprimirá una jugada por jugada de cada paso que lleva a la salida estándar. Así que en este caso podrías hacer:
logrotate -d /etc/logrotate.conf
La salida le dirá qué está pasando exactamente. Además, si desea reducir la salida de depuración, puede hacerlo
logrotate -d /etc/logrotate.d/messages
Aunque es posible que desee colocar temporalmente las opciones principales de logrotate.conf en ese bloque de archivos, ya que especificar el archivo directamente significa que nunca habrá leído las opciones de configuración principales. Especificar el archivo individual también significa que puede usar el -f
(forzar) en combinación con la opción de depuración para ver una rotación real del archivo de mensajes que se está produciendo.