logrotate - запустить postrotate после всей обработки

У меня есть сценарий logrotate, который структурирован для ротации журналов, собранных системным журналом. Частью этого сценария является перезагрузка процесса системного журнала. Проблема в том, что перезагрузка системного журнала выполняется для каждого соответствующего файла журнала, который он вращает, а их около 100. Как я могу настроить сценарий logrotate для перезагрузки процесса системного журнала только один раз после обработки всех отдельных журналов?

/logs/* {
   daily
   rotate 7
   compress
   postrotate
      /etc/init.d/syslog-ng reload 2>/dev/null
   endscript
}
1
задан 18 December 2015 в 21:07
3 ответа
/logs/*

^^^ Ваш спецсимвол также соответствует вашим *.gz файлам и вращает их в дополнение к файлам, которые вам действительно важны. Уточните ваше правило соответствия, чтобы включить в него только те файлы, которые вас интересуют, и вы должны быть полностью установлены.

1
ответ дан 3 December 2019 в 17:38

Использовать sharedscripts :

Обычно logrotate запускает сценарий postrotate каждый раз, когда он вращает журнал. Это также верно для нескольких журналов, в которых используется один и тот же блок конфигурации. Например, блок конфигурации веб-сервера это относится как к журналу доступа, так и к журналу ошибок, если он вращает оба, дважды запустите скрипт postrotate (один раз для каждого файла повернутый). Если оба файла повернуты, веб-сервер перезапускается. дважды.

Чтобы logrotate не запускал этот сценарий для каждого журнала, вы можете включите следующую команду:

sharedscripts Эта команда указывает logrotate проверять все журналы на наличие этот блок конфигурации перед запуском сценария postrotate. Если один или оба журнала повернуты, сценарий postrotate запускается только один раз. Если ни один из журналов не повернут, сценарий постротации не будет запущен.

3
ответ дан 3 December 2019 в 17:38

Если кто-то еще наткнется на это, следует отметить, что logrotate поддерживает несколько сценариев в различных точках, как определено в справочных страницах.

man logrotate

Вместо использования опции «постротация» вы можете заменить ее на «последнее действие»:

lastaction/endscript Строки между lastaction и endscript (оба должны появляться в строках сами по себе) выполняются (с использованием /bin/sh) один раз после всех файлов журнала, которые соответствуют шаблону с подстановочными знаками. ротируются после запуска скрипта postrotate и только в том случае, если хотя бы один журнал ротируется

0
ответ дан 28 September 2020 в 09:05

Теги

Похожие вопросы