logrotateがファイルを閉じる前にファイルを圧縮する理由

logrotateがファイルを閉じる前にファイルを圧縮する理由

mysqlの出力を回転させるためにlogrotateを使用しています。 cronがlogrotateを実行すると、次の内容を含む電子メールが頻繁に届きます。

error: Compressing program wrote following message to stderr when compressing log /var/log/mysql/mysqld.err-20150408:
gzip: stdin: file size changed while zipping

logrotateがファイルを移動してgzipを呼び出した後でも、ファイルがまだ開いていてmysqlがファイルに書き込んでいることを示しています。これは私のmysql logrotate設定です。

/var/log/mysql/mysql.err /var/log/mysql/mysql.log /var/log/mysql/mysqld.err {
monthly
create 660 mysql mysql
notifempty
size 5M
sharedscripts
missingok
postrotate
[ -f /var/run/mysqld/mysqld.pid ] && /bin/kill -HUP `cat /var/run/mysqld/mysqld.pid`
endscript
}

これは Gentoo の mysql パッケージに付属する修正されていないファイルなので、何か問題があると疑われます。他のログの回転に問題はありません。

何が起こるのかというアイデアはありますか?

ベストアンサー1

gzipエラーメッセージは、何が起こっているのかをほとんど教えてくれます。圧縮中にファイルが記録されています(この場合はMySQLによって)。マニュアルページでdelaycompress(with)を試してください。compress

遅延圧縮

前のログファイルの圧縮を次のサイクルに延期します。これは圧縮でのみ機能します。一部のプログラムがログファイルを閉じるように指示できず、しばらく前のログファイルに書き込みを続けることができる場合に使用できます。

おすすめ記事