Вопрос: logrotating файлы в каталогах и его подкаталогах


Можно ли получить logrotate рассматривать лог-файлы в каталоге и во всех его подкаталогах? (т. е. без явного перечисления подкаталогов.)


53
2017-12-01 18:31


Источник




Ответы:


Насколько глубоки ваши подкаталоги?

/var/log/basedir/*.log /var/log/basedir/*/*.log {
    daily
    rotate 5
}

Повернет все .журнал файлы на основе /, а также все .журнал файлы в любом прямом дочернем каталоге basedir. Если вам также нужно пройти 1 уровень глубже, просто добавьте еще один /var/log/basedir/*/*/*.log пока у вас не будет каждого уровня.

Это можно протестировать с помощью отдельного файла конфигурации logrotate, который содержит ограничение, которое не будет выполнено (высокий minsize), а затем запустить журнал, поворачивая себя в подробном режиме

logrotate -d testconfig.conf

флаг -d будет перечислять каждый файл журнала, который он планирует повернуть.


71
2017-12-01 18:49



Благодаря! Выглядит как -d ставит logrotate в режиме сухого режима (то есть фактически ничего не меняет). - ithinkihaveacat
Не совсем актуально, но, вероятно, полезно кому-то. -f опция указывает logrotate на «принудительный запуск». голым словом в конце команды является файл конфигурации, который будет использоваться вместо значения по умолчанию. так logrotate -f /some/config означает, что он запускается с этим конфигурационным файлом и всегда запускается, даже если файл конфигурации говорит, что еще не время для запуска. Для моих неподготовленных глаз и для моего предшественника, который поставил на него работу cron, казалось, что -f просто указывал конфигурационный файл. Совсем смущает. - Dan Pritts


В моем случае глубина подкаталогов может измениться без предупреждения, поэтому я установил сценарий bash, чтобы найти все подкаталоги и создать запись конфигурации для каждого каталога. Для меня также важно сохранить структуру подкаталогов после ротации, какие маскировки (т. Е. Ответ @ DanR), похоже, не делают. Если вы делаете ежедневные логарифмы, вы можете поместить этот скрипт в ежедневную работу cron.

basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents

subfolders = $(find ${basedir} -type d)

for ii in ${subfolders}
do
    jj=${ii:${#basedir}} #strip off basedir, jj is the relative path

    #append new entry to config_file
    echo "${basedir}${jj}/* {
        olddir ${destdir}${jj}/
        daily
        rotate 5
    }" >> ${config_file}

    #add one line as spacing between entries
    echo "\n" >> ${config_file}

    #create destination folder, if it doesn't exist
    [ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done

Как и @DanR, logrotate -d


4
2018-02-16 16:32





Это старый поток, но вы можете сделать следующее:

/var/log/basedir/**/*.log {
    daily
    rotate 5
}

Эти две звезды будут соответствовать нулевым или более каталогам. Однако вы должны быть осторожны, как вы определяете файлы журналов, которые нужно повернуть, поскольку вы можете поворачивать файлы, которые уже повернуты. Здесь я приведу руководство по легату.

Используйте шаблоны с осторожностью. Если вы укажете *, logrotate будет вращать все файлы, включая ранее повернутые. Кстати, это использовать директиву olddir или более точный шаблон (например, * .log).


0
2018-03-24 12:28



этот шаблон шаблона не работал для меня. Logrotate 3.8.6 на RHEL 7.3 - northben
Возможно, вам следует включить globstar перед запуском logrotate. Это позволит сделать это для bash shopt -s globstar, - bat_ventzi
У меня такая же проблема. Logrotate 3.8.7 на Ubuntu 16.04.3. ls /var/log/basedir/**/*.log работает, как описано, но logrotate этого не делает. - frogstarr78