解決策 1:
delaycompress
を追加 /var/log/messages
の設定セクションへ 問題を解決しました。
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.
sysklogd
だと思います 、私の syslog デーモンは、そのログファイルを閉じるように指示できないため、これが必要です。
興味深いことに、私が持っていた元の構成 (delaycompress
なし) ディレクティブ)、man logrotate
からそのまま出てきました (ただし weekly
を変更しました daily
まで ):
# sample logrotate configuration file
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
解決策 2:
この情報だけでは何とも言えませんが、何度か私を救ってくれた理由は言えます.
Logrotate にはデバッグ オプションがあり、実行する各ステップの再生ごとに stdout に出力します。したがって、この場合、次のことができます:
logrotate -d /etc/logrotate.conf
出力は、正確に何が起こっているかを示します。また、デバッグ出力を絞り込みたい場合は、
logrotate -d /etc/logrotate.d/messages
ただし、ファイルを直接指定すると、メインの構成オプションが読み取られないことを意味するため、メインの logrotate.conf オプションをそのファイル ブロックに一時的に配置することをお勧めします。個々のファイルを指定すると、 -f
を使用できることも意味します (強制) オプションをデバッグ オプションと組み合わせて使用すると、メッセージ ファイルの実際のローテーションを確認できます。