синтаксис файлу конфігурації logrotate - можливі кілька записів підстановки?


83

Оскільки сторінка man не відповідає на моє запитання, і я не хочу форсувати цикл обертання, я вирішив задати питання тут.

Сторінка man для логротату дає такий приклад:

   "/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так і всі файли журналу в підкаталогах цього каталогу - без необхідності перераховувати кожен підкаталог за назвою.

Загалом, сторінка man не дає поняття, чи можливі кілька записів за правилами wildcard або лише для повних шляхів. Я використовую logrotate версії 3.7.8-6, яка постачається з Debian "Squeeze", але я вважаю, що це не обов'язково стосується дистрибутивної або програмної версії.

Відповіді:


119

Так, ви можете використовувати кілька шаблонів. Ви можете протестувати свій файл, не виконуючи обертання, виконавши це:

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

  • -f = Показує логротату, щоб примусити обертання, навіть якщо він не вважає, що це необхідно. Іноді це корисно після додавання нових записів до логратації, або якщо старі файли журналів були видалені вручну, оскільки нові файли будуть створені, і журнал буде продовжуватися правильно. "


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
}

//, Чи не існує проблеми з різними шляхами, що виникають у кількох рядках?
Натан Басанес

@NathanBasanese Я не розумію в повному обсязі ваше питання, я думаю, ви можете вказати рядки шляху на файли будь-де на диску, який вам подобається, вони не повинні бути в одному префіксі каталогів.
ThorSummoner

@NathanBasanese о, я думаю, я розумію, що декілька цілей обертання журналу в різних рядках представляється нормальним використанням, я скопіював цю форму з інших сценаріїв logrotate.d, наприклад /etc/logrotate.d/rsyslog
ThorSummoner

4

На сторінці man для логротету :

Зауважте, що імена файлів журналу можуть бути укладені у лапки (і лапки потрібні, якщо ім'я містить пробіли). Звичайні правила котирування оболонки застосовуються із символами ', "та \, що підтримуються.

Будь ласка, не забудьте змінити або видалити лапки при переході від одного до кількох шаблонів:

Це працює:

/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" {

Тестували з логротатом 3.10.0


2
Було б цікаво дізнатися, чи це працює:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.