У меня есть сценарий logrotate, который структурирован для ротации журналов, собранных syslog. Частью этого сценария является перезагрузка процесса системного журнала. Проблема в том, что перезагрузка системного журнала выполняется для каждого соответствующего файла журнала, который он вращает, а их около 100. Как я могу настроить сценарий logrotate на перезагрузку процесса системного журнала только один раз после обработки всех отдельных журналов?
/logs/* {
daily
rotate 7
compress
postrotate
/etc/init.d/syslog-ng reload 2>/dev/null
endscript
}
Использовать общие скрипты:
Обычно logrotate запускает сценарий postrotate каждый раз при ротации журнала. Это также верно для нескольких журналов, использующих один и тот же блок конфигурации. Например, блок конфигурации веб-сервера, который относится как к журналу доступа, так и к журналу ошибок, будет, если он меняет оба, дважды запускает сценарий postrotate (один раз для каждого повернутого файла). Если оба файла повернуты, веб-сервер перезапускается дважды.
Чтобы logrotate не запускал этот сценарий для каждого журнала, вы можете включить следующую команду:
sharedscripts Эта команда сообщает logrotate о необходимости проверки всех журналов для этого блока конфигурации перед запуском сценария postrotate. Если один или оба журнала повернуты, сценарий postrotate выполняется только один раз. Если ни один из журналов не повернут, скрипт postrotate не запустится.
/logs/*
^^^ Ваш подстановочный знак также соответствует вашим файлам * .gz и меняет их в дополнение к файлам, которые вам действительно нужны. Уточните свое правило сопоставления, чтобы включить только тот файл, который вам интересен, и все должно быть готово.