Как вращать журнал на основе интервала, если журнал не превышает определенный размер?

20

Со страницы руководства logrotate:

minsize size
Файлы журнала вращаются, когда они растут больше, чем байты размера, но не ранее указанного дополнительного интервала времени (ежедневно, еженедельно, ежемесячно или ежегодно). Связанный параметр размера аналогичен, за исключением того, что он является взаимоисключающим с параметрами временного интервала и вызывает ротацию файлов журнала без учета последнего времени вращения. При использовании minsize учитываются размер и временная метка файла журнала.

размер размер
Файлы журнала вращаются, когда они растут больше, чем размер байтов. Если за размером следует k, размер считается в килобайтах. Если используется M, размер указывается в мегабайтах, а если используется G, размер указывается в гигабайтах. Так что размер 100, размер 100k, размер 100M и размер 100Gare все действительны.

Я установил размер как и интервал в еженедельном мышления , что журналы будут получать повернуты на еженедельной основе и дополнительное вращение будет происходить , если размер журнала превышает 5M. Но что происходит, так это то, что журнал не поворачивается, если он не превышает 5M, что, по-видимому, и должно быть для minsize .

Я неправильно истолковываю руководство? Как заставить журнал вращаться еженедельно И если он превышает 5 миллионов?

РЕДАКТИРОВАТЬ:

Я не уверен, актуальна ли следующая информация, а просто дополняю:

Я использую rsyslog для основной регистрации сообщений, безопасности, cron, maillog, загрузки. Ниже приведены дата ротации и размер файла предпоследних журналов, в которых размер и интервал установлены, как описано выше:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

Как видно, только сообщения вращаются.

EDIT2:

Я должен был проверить с man logrotate. Они фактически обновили его с опцией maxsize . Это должно быть то, что я ищу:

maxsize size
Файлы журнала вращаются, когда они растут больше, чем байты размера, даже до дополнительно указанного интервала времени (ежедневно, еженедельно, ежемесячно или ежегодно). Связанный параметр размера аналогичен, за исключением того, что он является взаимоисключающим с параметрами временного интервала и вызывает ротацию файлов журнала без учета последнего времени вращения. При использовании maxsize учитываются как размер, так и временная метка файла журнала.

Вопрос переполнен
источник

Ответы:

24

Здесь есть ответы на некоторые вопросы: ежедневная регистрация и размер?

Обычно logrotateон запускается только один раз в день, поэтому ограничения по размеру не будут соблюдаться. logrotateВ файле состояния (возможно /var/lib/logrotate.status) хранятся только даты (не раз), он не предназначен для более частого использования, поэтому вы не можете тривиально поворачивать файлы чаще ( Обновление : версия 3.85 добавляет почасовую поддержку и сохраняет полную метку времени в файле состояния .)

Вы не говорите, что syslogdвы используете, rsyslog и syslog-ng поддерживают самоуправляемое вращение на основе размера, поэтому вы должны иметь возможность заставить их вращаться по размеру и logrotateвращаться еженедельно (хотя некоторые мысли могут потребоваться для Именование файла, чтобы убедиться, что одновременное вращение файла не случайно что-то удаляет).

Еще один вариант - использовать конвейерные журналы, точно так же как Apache, фактически Apache-2.4 rotatelogs поддерживает именно эту функцию (предыдущие версии поддерживали только размер или время независимо). Вы не говорите, откуда берутся логи, но вы можете войти в трубу или fifo и использовать rotatelogs, если это поддерживается.

При logrotate<= v3.8.0 поддерживаются три сценария:

  1. размер изменяется по размеру, самое большее один раз в день, независимо от прошедшего периода времени
  2. временной период вращается безоговорочно по временному периоду, независимо от размера
  3. minsize & timeperiod, если размер файла журнала превышает minsize, а затем повернуть на timeperiod. Обычно используется «minsize 1», что означает, что 0-байтовые журналы не вращаются, что сводит к минимуму беспорядок.

logrotate-3.8.1 добавляет:

  1. maxsize и timeperiod вращаются, когда размер превышает maxsize, или после истечения периода времени. logrotateв этом случае может потребоваться запускать больше, чем по умолчанию один раз в день.

logrotate-3.8.5 добавляет:

  1. почасовая поддержка и сохраняет полную метку времени в файле состояния. Вы должны бежать logrotate(по крайней мере) ежечасно для этого.
mr.spuratic
источник
Пожалуйста, смотрите мое обновление, спасибо за ссылку. Похоже, некоторые сценарии требуются? minsize кажется не очень полезным, мне интересно, почему у них это есть вместо maxsize.
Вопрос переполнен
1
Да, опция maxsize теперь доступна. Дело закрыто :)
Вопрос переполнен
заметил, что в документации, прежде чем я прочитал ваше обновление ... ответ теперь расширен. Спасибо.
mr.spuratic
1
> Файл состояния logrotate (возможно, /var/lib/logrotate.status) хранит только даты (не раз). Это утверждение может быть устаревшим. Я только что проверил свой файл состояния logrotate, и он содержал временные метки со вторым разрешением: "/var/log/kern.log" 2018-3-12-1: 8: 16
hyperair