2015-07-01 5 views
16

в последние дни я получаю ежедневно почту от LogRotate задачи Cron в:Как я могу исправить «/etc/cron.daily/logrotate: gzip: stdin: размер файла изменен при zipping»?

/etc/cron.daily/logrotate:

GZIP: STDIN: размер файла изменился, а проносясь

Как можно Я чиню это?

Thanks, Gian Marco.

+0

См. [Здесь] (http://superuser.com/questions/630782/) –

ответ

19

Адрес a blog post in French, который дает решение.

На английском языке вы можете прочитать this bug report.

Резюмируя:

  1. Сначала вы должны добавить опцию --verbose в сценарии /etc/cron.daily/logrotate, чтобы получить более подробную информацию в следующий раз, он работает, чтобы определить, какой журнал вращения вызывает проблему.

    #!/bin/sh 
    
    test -x /usr/sbin/logrotate || exit 0 
    /usr/sbin/logrotate --verbose /etc/logrotate.conf` 
    
  2. Далее вы должны добавить delaycompress опцию в LogRotate конфигурации.

+1

Можете ли вы запустить логротат сразу или вам нужно дождаться его повторного запуска? Как добавить функцию delaycompress в конфигурацию logrotate? Можете ли вы привести пример? –

+2

@LanceHolland вы можете запустить его снова с помощью:/usr/sbin/logrotate /etc/logrotate.conf Однако, в зависимости от настроек logrotate (частота, minsize и т. Д.), Условий может быть недостаточно, чтобы вызвать проблему gzip , Я думаю, что лучше добавить многословную версию, а затем позволить ей работать в соответствии с ежедневным графиком. –

+0

'delaycompress' поможет вам в определенных случаях. См. Мой ответ. – Ztyx

0

upstart закроется (и открыть) свой файл журнала при it notices that the file is deleted. Однако, если вы посмотрите на what gzip does, вы увидите, что он не удаляет файл до тех пор, пока он не напишет выходной файл. Это означает, что всегда существует условие гонки, в котором логарифмические строки могут быть потеряны для записываемых журналов строк.

Вы можете отключить предупреждение, используя gzip --quiet, но на самом деле это не скрывает, что вы все равно можете потерять строки журнала.

Это означает, что delaycompress не является общим исправлением. Это конкретное решение конкретной проблемы.

Реальное решение для этого, вероятно, представляет собой комбинацию delaycompress и возможность отправки сигнала в процесс. Это заставит состояние гонки уйти на практике (если вы не будете вращаться несколько раз в секунду :)).