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?
Да, вам нужно ежедневно, так как вы хотите, чтобы этот раздел выполнялся каждый день. Это контролирует частоту выполнения раздела, а maxage контролирует, как долго хранятся повернутые файлы. Это две разные вещи.
Что именно делает недостающий?
Отсутствие означает, что logrotate не будет жаловаться / генерировать ошибку, если файл журнала для ротации не существует. Если это не указано, а файл журнала, предназначенный для ротации, отсутствует, logrotate создаст журнал ошибок.
Нужно ли использовать copytruncate, если я указываю daily/maxage 1?
Если copytruncate работает для вас сейчас, не меняйте его. Это относится к исходному файлу журнала
copytruncate дает команду logrotate для создания копии исходного файла (т. е. вращения исходного файла журнала) и обрезания исходного файла до нулевого байтового размера. Это помогает соответствующей службе, которая принадлежит этому файлу журнала, записывать в соответствующий файл.
Чтобы запустить 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