Logrotate сжимать файлы после postrotate script
У меня есть приложение, создающее действительно тяжелый большой файл журнала каждый день (~ 800 МБ в день), поэтому мне нужно сжать их, но поскольку сжатие требует времени, я хочу, чтобы этот файл сжимал файл после перезагрузки/отправки сигнала 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
}
Это уже случай, когда сжатие происходит после постротата (что было бы противоречивым)?
Если нет, может ли кто-нибудь сказать мне, возможно ли это сделать без дополнительной команды script (вариант или какой-то трюк)?
Спасибо
Томас
Ответы
Ответ 1
postrotate
script выполняется перед сжатием: с man-страницы для logrotate
Следующий раздел конфигурационных файлов определяет, как обрабатывать файл журнала /Вар/Журнал/сообщения. Журнал будет проходить пять недельных ротаций до удаляется. После того, как файл журнала был повернут (но до старого версия журнала была сжата), команда /sbin/killall -HUP syslogd будет выполнен.
В любом случае вы можете использовать опцию delaycompress
, чтобы отложить сжатие до следующего вращения.
Ответ 2
Добавьте сюда эту информацию в случае, если кто-то еще сталкивается с этим потоком, когда на самом деле ищет способ запустить script в файле после завершения сжатия. Как было сказано выше, использование postrotate/endscript не подходит для этого. Вместо этого вы можете использовать lastaction/endscript, который отлично выполняет эту работу.
Ответ 3
В постротате script всегда выполняется сжатие до, даже если действуют общие скрипты. Поэтому Хастуркун дополнительный ответ на первый ответ неверен. Когда sharedscripts действует, единственное сжатие, выполняемое до postrotate, - это для старых несжатых журналов, которые лежали вокруг из-за задержки. Для текущих журналов сжатие всегда выполняется после, запуская postrotate script.
Ответ 4
@Hasturkun - нельзя добавить комментарий, если их репутация не выше 50.
Чтобы убедиться в том, что сделает logrotate,
- проверьте свою конфигурацию с помощью -d: debug, которые проверяют, но не делают
ничего, и -f: заставить его запускать
- или вы можете выполнить logrotate с помощью
-v подробный флаг
С конфигурацией, которая использует sharedscript для postrotate
$ 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