logrotate конфигурация и исполнение

Я пытаюсь настроить logrotate вращать и удалять файлы журналов каждый день в полночь, но никогда не использовал его раньше. Итак: (а) я хочу подтвердить, что моя конфигурация верна, и (б) мне нужна помощь в автоматизации ежедневного выполнения в полночь.

Мое программное обеспечение создает большой файл журнала на /abs/path/to/log/myapp-log.txt, Вот что я хотел бы случиться:

  • Отметка времени каждого файла журнала с расширением даты в его имени
  • Только 1 файл журнала в /abs/path/to/log/ в любой момент времени; таким образом, каждый раз, когда журнал поворачивается и создается новый файл журнала, удаляйте старый

logrotate.conf:

/abs/path/to/log/myapp-log.txt {
    daily
    copytruncate
    create 700 myUser myGroup
    dateext
    maxage 1
    missingok
}

Несколько вещей, в которых я не уверен:

  • Нужно ли указывать daily если я укажу maxage из 1?
  • Что именно missingok делать? Что-то о игнорировании системного предупреждения, если файл журнала отсутствует? Что будет, если я не укажу missingok а файл журнала там нет?
  • Мне вообще нужно copytruncate если я укажу daily/maxage 1? Эти три параметра кажутся немного излишними, но не уверены, какую роль играет каждый из них.

Во-вторых, как мне убедиться, что это происходит каждый день в полночь? Cron? Я спрашиваю только потому, что где-то читал /etc/cron.daily/logrotate запускается автоматически каждый день, но не уверен, как это настраивается. Заранее спасибо.

1 ответ

Решение
  1. Нужно ли указывать ежедневно, если я указываю макс 1?

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

  2. Что именно делает недостающий?

    Отсутствие означает, что logrotate не будет жаловаться / генерировать ошибку, если файл журнала для ротации не существует. Если это не указано, а файл журнала, предназначенный для ротации, отсутствует, logrotate создаст журнал ошибок.

  3. Нужно ли использовать copytruncate, если я указываю daily/maxage 1?

    Если copytruncate работает для вас сейчас, не меняйте его. Это относится к исходному файлу журнала

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

  4. Чтобы запустить logrotate в полночь

    Есть 2 способа сделать это.

    • Метод 1 - Изменение при запуске ежедневного cron

      Найдите следующие строки в /etc/crontab

      25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
      

      Измените 25 6 (означает 6:25 утра) до 0 0. Это также изменяет ВСЕ ежедневные задания cron, начиная с полуночи.

    • Способ 2 - использовать пользовательскую строку crontab

      Переместить logrotate из стандартного ежедневного расписания cron

      mv /etc/cron.daily/logrotate /etc/logrotate.cronjob
      

      Создать пользовательскую работу cron. Добавьте следующую строку в /etc/crontab

      0 0 * * * root /etc/logrotate.cronjob
      
Другие вопросы по тегам