web-dev-qa-db-ja.com

「/etc/cron.daily/logrotate:gzip:stdin:圧縮中に変更されたファイルサイズ」を修正するにはどうすればよいですか?

最後の日に私はcronのlogrotateタスクから毎日メールを受け取ります:

/etc/cron.daily/logrotate:

gzip:stdin:圧縮中にファイルサイズが変更されました

どうすれば修正できますか?

ありがとう、Gian Marco。

19
Kiuki

こちらが フランス語のブログ投稿 です。

英語では このバグレポート を読むことができます。

要約すると:

  1. 最初に--verboseオプションをスクリプト/etc/cron.daily/logrotateに追加して、次回の実行時に問題の原因となっているローテーションログを特定するための詳細情報を取得する必要があります。

    #!/bin/sh
    
    test -x /usr/sbin/logrotate || exit 0
    /usr/sbin/logrotate --verbose /etc/logrotate.conf`
    
  2. 次に、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
        ...
    }
    
23
lamanux

upstartファイルが削除されたことに気づく のときにログファイルを閉じます(そして再度開きます)。ただし、 gzipの機能 を見ると、出力ファイルを書き込むまではファイルが削除されないことがわかります。つまり、gzippingと書き込まれる行ログのログ行が失われる可能性があるという競合状態が常に存在します。

gzip --quietを使用して警告を無効にすることができますが、実際にはそれでもログ行が失われる可能性があるという事実は隠されません。

つまり、delaycompressはこれに対する一般的な修正ではありません。特定の問題に対する特定の修正です。

これに対する実際の解決策は、おそらくdelaycompressと、プロセスにシグナルを送信できることの組み合わせです。これにより、実際には競合状態が解消されます(1秒間に複数回ローテーションしない限り:))。

1
Ztyx