3

Я тестирую конфигурацию logrotate в /tmp . мне бы хотелось

  1. настроить политику logrotate по умолчанию для файлов /tmp/*.log используя мой тестовый конфигурационный файл /tmp/logrotate.conf
  2. для обработки определенного файла журнала /tmp/special.log с другой политикой, настроенной в отдельном тестовом файле конфигурации logrotate: /tmp/logrotate.d/included

Но ответ logrotate на мою конфигурацию заключается в следующем:

error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

Что я должен делать по-другому?

Вот мой /tmp/logrotate.conf

compress
missingok
notifempty
size 512k
copytruncate
rotate 2
su

# here's my attempt at applying the default policy to all /tmp/*.log
/tmp/*.log {}

# and here I intend to include any overrides
include /tmp/logrotate.d/included

А вот /tmp/logrotate.d/included

/tmp/special.log {
    size 300
}

Вот отладочный вывод.

$ sudo logrotate -d ./logrotate.conf

reading config file ./logrotate.conf
including /tmp/logrotate.d/included
reading config file /tmp/logrotate.d/included
error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

Handling 2 logs

rotating pattern: /tmp/*.log  524288 bytes (2 rotations)
empty log files are not rotated, old logs are removed
considering log /tmp/normal.log
  log does not need rotating
considering log /tmp/special.log
  log does not need rotating

rotating pattern: /tmp/special.log  300 bytes (2 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
  1. Ошибка удивляет меня, потому что я подумал, согласно странице руководства: «Более поздние файлы конфигурации могут переопределять параметры, заданные в более ранних файлах, поэтому важен порядок, в котором перечислены файлы конфигурации logrotate».
  2. Почему при обработке шаблона /tmp/special.log в конце говорится, что журналы не найдены? Файл /tmp/special.log существует и имеет размер более 300 байт.

1 ответ1

1

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

Если файлы журналов конкретного правила и общего правила должны находиться в одном и том же каталоге (можете ли вы перенастроить их для перемещения?), То вам необходимо создать и поддерживать явное исключение из общего правила для каждого перекрывающегося пути. logrotate.conf не предусматривает этого явно, но если ваш logrotate запускается в среде с включенными глобальными расширениями оболочки extglob , исключение возможно. Вы можете проверить, включен ли extglob , запустив shopt extglob в той же корневой среде, в которой будет запускаться ваш crontab logrotate, и его можно явно включить (если требуется) с shopt -s extglob .

Как только extglob включен, он допускает такие конструкции, как:

/tmp/!(special).log {}

... что предотвратит совпадение с более конкретным последующим правилом, избегая ошибки.

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