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

8590
pnongrata

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

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

3

1 ответ на вопрос

10
John Siu
  1. Do I need to specify daily if I'm specifying a maxage of 1?

    Yes, you need daily as you want this section to execute everyday. This control how execution frequency of the section, while maxage control how long rotated files are kept. They are 2 different things.

  2. What exactly is missingok doing?

    missingok means logrotate will not complain/generate error if the log file for rotation does not exist. If this is not specified and the log file intended for rotation is missing, logrotate will generate an error log.

  3. Do I even need copytruncate if I'm specifying daily/maxage 1?

    If copytruncate is working for you now, don't change it. It apply to original log file

    copytruncate instruct logrotate to creates the copy of the original file (i.e rotate the original log file) and truncates the original file to zero byte size. This helps the respective service that belongs to that log file can write to the proper file.

  4. To run logrotate at mid-night

    There are 2 methods to do it.

    • Method 1 - Change when daily cron is run

      Look for following lines in /etc/crontab

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

      Change 25 6 (means 6:25AM), to 0 0. This also change ALL daily cron job starting time to mid-night.

    • Method 2 - Use custom crontab line

      Move logrotate out of default daily cron schedule

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

      Create custom cron job. Add following line into /etc/crontab

      0 0 * * * root /etc/logrotate.cronjob 

Похожие вопросы