Назад | Перейти на главную страницу

Как ведет себя logrotate, когда есть * и есть одно явное имя файла в ротации журнала по одному пути?

Вопрос немного длинный! Позвольте мне объяснить на примере ниже. я

иметь файл конфигурации ротации журналов в /etc/logrotate.d/ который используется для uwsgi:

"/var/log/uwsgi/*.log" "/var/log/uwsgi/*/*.log" {
  copytruncate
  daily
  rotate 5
  compress
  delaycompress
  missingok
  notifempty
}

Допустим, у меня около 12 модулей uwsgi, и я хочу сохранить один файл журнала приложения uwsgi больше, чем другие, поэтому у меня есть конфигурация, как показано ниже:

/var/log/uwsgi/app/MY_APP.log {
        daily
        missingok
        rotate 60
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
}

Теперь вопрос в том, как мне создать ротацию журнала, как указано выше, и сохранить * для 11 других модулей. Я не хочу создавать ротацию 11 журналов с одинаковой конфигурацией. Что мне делать, чтобы перезаписать только один модуль?

Во-первых, у logrotate нет простого способа переопределить существующее совпадение глобуса файла. Простая попытка добавить более конкретное совпадение позже в конфигурации даст вам сообщение об ошибке.

Итак, чтобы обойти это, есть два основных способа.

Первый самый простой: поместите журналы, которые требуют другой обработки, в другой каталог. Таким образом, вы даже можете упростить изменение конфигурации, просто сделав журнал приложения в другом каталоге. Пример:

"/var/log/uwsgi/*.log" "/var/log/uwsgi/keep05/*.log" {
  copytruncate
  daily
  rotate 5
  compress
  delaycompress
  missingok
  notifempty
}

"/var/log/uwsgi/keep60/*.log" {
  daily
  missingok
  rotate 60
  compress
  delaycompress
  notifempty
  create 0640 www-data adm
}

Второй способ было бы создать исключение в первом глобусе - тот, который соответствует всем 12 журналам. Но поскольку у logrotate нет простого способа исключить конкретный файл, у вас остается то, что предоставляет стандартная библиотека сопоставления имен файлов, а это, по сути, всего лишь один символ в имени файла. Если вы установили правило, согласно которому журналы, которые необходимо хранить в течение 60 дней, должны начинаться с 6, а другие журналы не могут начинаться с 6, вы можете сделать следующее:

"/var/log/uwsgi/*.log" "/var/log/uwsgi/*/[!6]*.log" {
  copytruncate
  daily
  rotate 5
  compress
  delaycompress
  missingok
  notifempty
}

"/var/log/uwsgi/app/6*.log" {
  daily
  missingok
  rotate 60
  compress
  delaycompress
  notifempty
  create 0640 www-data adm
}

Рекомендую первую версию; Вероятно, проще всего будет отслеживать, добавляете ли вы дополнительные приложения или когда это произойдет.