ежедневник и размер?

40

Если конфигурация logrotate указана с параметрами «size» и «daily», какой из них имеет приоритет? Где это задокументировано? Мне бы хотелось, чтобы эти повороты происходили как логическая операция ИЛИ, т. Е. Если журналы имеют дневной возраст, они вращаются, ИЛИ, если они больше определенного размера, они также будут вращаться. Однако в настоящее время logrotate использует только директиву size и, по-видимому, игнорирует директиву daily. Logrotate настроен на запуск каждый час. ОС Linux, производные от Red Hat и Debian.

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

Благодарность!

кошачьи штаны
источник
2
Также см. Serverfault.com/questions/474941/…
belacqua
> локальные определения переопределяют глобальные, а более поздние определения> переопределяют более ранние из
Джон Боб Джо

Ответы:

62

Если используется директива size , logrotate будет игнорировать ежедневные , еженедельные , ежемесячные и годовые директивы. Это не ясно в документации, когда вы выполняете man logrotateкоманду. Однако это может быть подтверждено на практике, и упоминается в некоторых произвольных сообщениях в блоге, таких как этот .

Существует директива minsize, которая, согласно man-странице logrotate, является единственной директивой размера, которую можно использовать вместе со временными. Тем не менее, это все еще не то, что вы хотите. Использование minsize с daily по сути говорит: вращайте журналы ежедневно, но только тогда, когда они имеют размер не менее #MB .

На сегодняшний день я не нашел способа с logrotate выполнить требуемое условие: вращаться каждый день, если размер не превышает #MB, в этом случае вращаться немедленно . Я не думаю, что это поддерживается с использованием только директив logrotate. Это может быть возможно сделать с некоторыми умными сценариями с помощью директив ловушек сценария, таких как prerotate , postrotate , firstaction и lastaction .

Обновление :

Начиная с logrotate 3.8.1, maxsizeи timeperiodподдерживаются вместе, что было бы идеальным решением. См. Ответ на этот пост: Как вращать журнал на основе интервала, если журнал не превышает определенный размер?

gregtczap
источник
4
Наилучшим вариантом, вероятно, будет использование двух отдельных команд cron, запускаемых для ежедневного запуска с conf по умолчанию, и одной каждые x минут, которая принимает конфигурацию только с файлами, которые вы беспокоитесь о переполнении, используя директиву size, а не ежедневную.
SilverbackNet
8
По состоянию на logrotate 3.81, maxsizeи timeperiodподдерживаются. За serverfault.com/questions/474941/…
belacqua
1
@belacqua Я использую 3.8.7 и timeperiod не в человеке.
JorgeeFG
Правильная версия на самом деле 3.8.1, а не 3.81.
Том Миллер
2

Первый ответ @egg, согласно моему опыту с logrotate, не соответствует действительности!

Если ежедневно, ежемесячно ... приходите первыми и после этой директивы размера , ежедневная, ежемесячная ... будет игнорироваться и директива размера будет применяться к файлу журнала.

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

МИЗ
источник
1

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

Если ежедневник идет первым в сценарии, то размер может не сработать.

Пол Хикокс
источник
используйте подробный параметр, чтобы увидеть, какие правила используются. Из моих тестов я считаю, что используется только последнее правило, потому что более конкретные правила могут переопределять более общие правила.
Брэм
Больше вращений в порядке, так как это было бы ожидаемое поведение. (логическое ИЛИ) Однако, моя проблема в том, что эти вращения не происходят. Похоже, что это ошибка (возможно, особенность) журнала поворота, так как я не вижу, чтобы порядок директив был важным или задокументированным.
штаны для кошек
Можете ли вы привести пример вашего logrotate.conf и файлов, на которые вы пытаетесь нацелиться? Ежедневно не имеет состояния, отличного от прогрессии времени. Размер условен.
Пол Хикокс
/tmp/output.log {ежедневный размер 1k поворота 5}
штаны для кошек
1
Этот файл поворачивается, когда его размер превышает 1 КБ, но он не поворачивается ежедневно, как ожидается и желательно.
кошачьи штаны
1

На самом деле, моя справочная страница в Red Hat, похоже, довольно ясно показывает разницу между размерами и размерами:

миниатюрный размер

          Log  files  are rotated when they grow bigger then size bytes,
          but  not  before  the  additionally  specified  time  interval
          (daily,  weekly, monthly, or yearly).  The related size option
          is similar except that it is mutually exclusive with the  time
          interval  options, and it causes log files to be rotated with-
          out regard for the last rotation time.  When minsize is  used,
          both the size and timestamp of a log file are considered.
Джеффри М.
источник