Lösung 1:
Hinzufügen von delaycompress
zum Konfigurationsabschnitt für /var/log/messages
hat das Problem gelöst.
Ab 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.
Ich schätze sysklogd
, mein Syslog-Daemon, kann nicht angewiesen werden, seine Protokolldatei zu schließen, und daher ist dies erforderlich.
Interessanterweise war die ursprüngliche Konfiguration, die ich hatte (ohne die delaycompress
Direktive), kam direkt aus man logrotate
(außer ich habe weekly
geändert bis daily
):
# sample logrotate configuration file
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
Lösung 2:
Mit diesen Informationen ist es schwer zu sagen, aber ich kann Ihnen sagen, was mich ein paar Mal gerettet hat.
Logrotate hat eine Debug-Option, die ein Play-by-Play von jedem Schritt druckt, der bis zur Standardausgabe ausgeführt wird. In diesem Fall könnten Sie also Folgendes tun:
logrotate -d /etc/logrotate.conf
Die Ausgabe wird Ihnen sagen, was genau los ist. Wenn Sie die Debug-Ausgabe einschränken möchten, können Sie dies auch tun
logrotate -d /etc/logrotate.d/messages
Möglicherweise möchten Sie die Hauptoptionen von logrotate.conf vorübergehend in diesem Dateiblock platzieren, da die direkte Angabe der Datei bedeutet, dass sie die Hauptkonfigurationsoptionen nie gelesen hat. Die Angabe der einzelnen Datei bedeutet auch, dass Sie den -f
verwenden können (Erzwingen)-Option in Kombination mit der Debug-Option, um einen Blick auf eine tatsächlich stattfindende Rotation der Nachrichtendatei zu werfen.