76

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

Страница 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", но я считаю, что это не обязательно относится к дистрибутиву или версии программы.

3 ответа3

110

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

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

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

18

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

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

/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
}
3

Со страницы 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .