Синтаксис файла конфигурации logrotate - возможно несколько подстановочных знаков?

83

Поскольку страница руководства не отвечает на мой вопрос, и я не хочу запускать цикл ротации, я решил задать этот вопрос здесь.

Страница man для logrotate дает следующий пример:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail www@my.org
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

Все примеры с подстановочными знаками содержат только одну запись. Теперь меня интересует, разрешено ли это:

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }

Вот причина: у меня есть несколько vhosts, и я разделил их по пользователю, который «владеет» этими vhosts. Поскольку файлы журналов доступны для чтения всем, я хочу подключить папку в домашний каталог пользователя, но ограничить ее файлами журналов, которые «принадлежат» пользователю, что проще всего сделать, разделив журналы на папки (и связать -монтирование требует эту схему в любом случае). Поэтому я ищу решение для поворота как файлов журнала, /var/log/httpdтак и всех файлов журнала в подкаталогах этого каталога - без необходимости перечислять каждый подкаталог по имени.

В общем, страница руководства не дает никакой информации о том, возможно ли вообще несколько записей для правил подстановочных знаков или только для полных путей. Я использую logrotate версии 3.7.8-6, которая поставляется с Debian "Squeeze", но я считаю, что это не обязательно относится к дистрибутиву или версии программы.

0xC0000022L
источник

Ответы:

119

Да, вы можете использовать несколько групповых символов. Вы можете проверить свой файл, не выполняя фактических вращений, выполнив это:

logrotate -d -f /etc/logrotate.conf
  • -d = Включает режим отладки. В режиме отладки не будет внесено никаких изменений в журналы или файл состояния logrotate.

  • -f = Указывает logrotate форсировать вращение, даже если он не считает это необходимым. Иногда это полезно после добавления новых записей в logrotate, или если старые файлы журнала были удалены вручную, так как новые файлы будут созданы, и регистрация продолжится правильно.

Деннис Уильямсон
источник
3
большое спасибо! Только что попробовал и все работает. Из вывода видно, что подстановочные знаки могут работать так же, как и в оболочке.
0xC0000022L
24

Я просто хотел уточнить, потому что это то, что я получил здесь, глядя, как это сделать,

Допускается указание нескольких файлов журнала для одной конфигурации, например

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail nobody@example.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}
ThorSummoner
источник
//, нет ли проблемы с разными путями, встречающимися в нескольких строках?
Натан Басанезе
@NathanBasanese Я не совсем понимаю ваш вопрос, я думаю, вы можете указать пути к файлам в любом месте на диске, который вам нравится, они не обязательно должны быть в одном префиксе каталога.
ThorSummoner
@NathanBasanese О, я думаю, я понимаю, что использование нескольких целей ротации журналов на разных строках кажется нормальным использованием, я скопировал эту форму из других сценариев logrotate.d, например /etc/logrotate.d/rsyslog
ThorSummoner
5

Со страницы man для logrotate :

Обратите внимание, что имена файлов журнала могут быть заключены в кавычки (и что кавычки необходимы, если имя содержит пробелы). Применяются обычные правила цитирования оболочки, поддерживаются символы ', "и \.

Пожалуйста, не забудьте изменить или удалить кавычки при переходе от одного к нескольким шаблонам:

Это работает:

/var/log/*.log /var/log/*.blog {

это тоже работает:

/var/log/*.log
/var/log/*.blog {

Это не работает:

'/var/log/*.log /var/log/*.blog' {

и ни это

"/var/log/*.log /var/log/*.blog" {

Сравните с одним шаблоном.

Это работает:

'/var/log/*.log' {

и это тоже работает:

"/var/log/*.log" {

Протестировано с logrotate 3.10.0

Петр Доброгост
источник
2
Было бы интересно узнать, работает ли это:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus