Soluzione 1:
Aggiunta di delaycompress
alla sezione di configurazione per /var/log/messages
risolto il problema.
Da 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.
Immagino sysklogd
, il mio demone syslog, non può essere detto di chiudere il suo file di log, e quindi questo è necessario.
È interessante notare che la configurazione originale che avevo (senza delaycompress
direttiva), è uscito direttamente da man logrotate
(tranne che ho cambiato weekly
a daily
):
# sample logrotate configuration file
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
Soluzione 2:
È difficile dirlo solo con queste informazioni, ma posso dirti cosa mi ha salvato un paio di volte.
Logrotate ha un'opzione di debug che stamperà un play-by-play di ogni passaggio necessario per stdout. Quindi in questo caso potresti fare:
logrotate -d /etc/logrotate.conf
L'output ti dirà cosa sta succedendo esattamente. Inoltre, se vuoi restringere l'output di debug puoi farlo
logrotate -d /etc/logrotate.d/messages
Anche se potresti voler posizionare temporaneamente le opzioni principali di logrotate.conf in quel blocco di file poiché specificare direttamente il file significa che non avrà mai letto le opzioni di configurazione principali. Specificare il singolo file significa anche che puoi usare -f
(forza) in combinazione con l'opzione di debug per dare un'occhiata a una rotazione effettiva del file dei messaggi in atto.