logrotate сжимает файлы после постротационного скрипта - PullRequest
14 голосов
/ 01 сентября 2011

У меня есть приложение, генерирующее очень тяжелый большой файл журнала каждый день (~ 800 МБ в день), поэтому мне нужно сжать их, но поскольку сжатие требует времени, я хочу, чтобы logrotate сжимал файл после перезагрузки / отправки сигнала HUP вприложение.

/var/log/myapp.log {
    rotate 7
    size 500M
    compress
    weekly
    postrotate
        /bin/kill -HUP `cat /var/run/myapp.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

Это уже тот случай, когда сжатие происходит после постротации (что было бы нелогичным)?Если нет Может кто-нибудь сказать мне, если это можно сделать без дополнительного командного сценария (опция или какой-то трюк)?

Спасибо Томас

Ответы [ 4 ]

41 голосов
/ 22 августа 2012

Добавление этой информации здесь в случае, если кто-то еще сталкивается с этой цепью, когда на самом деле ищет способ запуска сценария для файла после завершения сжатия.

Как предложено выше, использование postrotate / endcript не годится для этого.

Вместо этого вы можете использовать lastaction / endcript , который отлично справляется с работой.

21 голосов
/ 12 ноября 2011

Скрипт postrotate всегда запускает до сжатия, даже когда действует sharedscripts . Поэтому дополнительный ответ Хастуркуна на первый ответ неверен. Когда действует sharedscripts , единственное сжатие, выполняемое до postrotate , относится к старым несжатым журналам, оставленным без присмотра из-за delaycompress . Для текущих журналов сжатие всегда выполняется после запуска сценария postrotate .

15 голосов
/ 01 сентября 2011

Сценарий postrotate запускается до того, как происходит сжатие: со страницы руководства для logrotate

В следующем разделе файлов конфигурации определено, как обрабатывать файл журнала /вар / журнал / сообщения.Журнал будет проходить пять еженедельных вращений перед удалением.После того, как файл журнала был повернут (но до того, как старая версия журнала была сжата), будет выполнена команда / sbin / killall -HUP syslogd.

В любом случае вы можете использоватьопция delaycompress, чтобы отложить сжатие до следующего вращения.

2 голосов
/ 19 сентября 2013

@ Hasturkun - Нельзя добавлять комментарии, если их репутация не превышает 50.

Чтобы убедиться, что logrotate сделает, либо

  1. проверить вашу конфигурацию с помощью -d: отладка, которая проверяет, но не выполняет что-нибудь, и -f: заставить это бежать
  2. или вы можете выполнить logrotate с помощью -v подробный флаг

С конфигурацией, которая использует sharedscript для постротации

$ logrotate -d -f <logrotate.conf file>

Показывает следующие шаги:

rotating pattern: /tmp/log/messages /tmp/log/maillog /tmp/log/cron
...
renaming /tmp/log/messages to /tmp/log/messages.1
renaming /tmp/log/maillog to /tmp/log/maillog.1
renaming /tmp/log/cron to /tmp/log/cron.1
running postrotate script
<kill-hup-script executed here>
compressing log with: /bin/gzip
compressing log with: /bin/gzip
compressing log with: /bin/gzip
...