最後の日に私はcronのlogrotateタスクから毎日メールを受け取ります:
/etc/cron.daily/logrotate:
gzip:stdin:圧縮中にファイルサイズが変更されました
どうすれば修正できますか?
ありがとう、Gian Marco。
こちらが フランス語のブログ投稿 です。
英語では このバグレポート を読むことができます。
要約すると:
最初に--verbose
オプションをスクリプト/etc/cron.daily/logrotate
に追加して、次回の実行時に問題の原因となっているローテーションログを特定するための詳細情報を取得する必要があります。
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate --verbose /etc/logrotate.conf`
次に、logrotate設定にdelaycompress
オプションを追加する必要があります。
例のように、nginxのlogrotate構成を/etc/logrotate.d/nginxに追加します。
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
...
}
upstart
は ファイルが削除されたことに気づく のときにログファイルを閉じます(そして再度開きます)。ただし、 gzipの機能 を見ると、出力ファイルを書き込むまではファイルが削除されないことがわかります。つまり、gzipping
と書き込まれる行ログのログ行が失われる可能性があるという競合状態が常に存在します。
gzip --quiet
を使用して警告を無効にすることができますが、実際にはそれでもログ行が失われる可能性があるという事実は隠されません。
つまり、delaycompress
はこれに対する一般的な修正ではありません。特定の問題に対する特定の修正です。
これに対する実際の解決策は、おそらくdelaycompress
と、プロセスにシグナルを送信できることの組み合わせです。これにより、実際には競合状態が解消されます(1秒間に複数回ローテーションしない限り:))。