Logrotate: вращать все файлы журнала на определенный размер и вращаться ежечасно

Мой файл logrotate в Ubuntu запускается ежедневно. Я хочу удостовериться, что его вращающиеся файлы журналов каждый час больше не вызывают ошибок диска. Итак, мой файл logrotate находится в папке cron.daily, достаточно ли просто переместить его в cron.hourly?

Я также хочу сохранить максимальный размер файла журнала на 5 МБ, но я не уверен, что изменить в logrotate.cnf.

Содержимое logrotate.cnf (без разрывов строк):

еженедельно повернуть 4 создать включить /etc/logrotate.d

/ var / log / wtmp {пропущено ежемесячно создать 0664 root utmp rotate 1}

/ var / log / btmp {отсутствует ежемесячно создать 0660 root utmp rotate 1 }

Я знаю, что должен использовать размер 5M, но где мне его написать? Хорошо ли я думаю, что первая строка предназначена для всех файлов журнала, а вторая и третья - только для wtmp и btmp? Так что, если моя логика верна, я должен написать размер 5M во всей строке, я прав?

2 ответа

Решение

Для того, чтобы он имел какой-либо эффект, скрипт cron должен запускаться как минимум так часто, как вы хотите вращать файлы. Даже если вы в настоящее время запускаете скрипт один раз в день (из cron.daily), он будет менять файлы только раз в неделю (weekly Ключевое слово в скрипте logrotate устанавливает значение по умолчанию, оно заменяется на ежемесячное в случае wtmp и btmp).

Версия logrotate в моем ближайшем Linux-боксе работает только до ежедневной продолжительности (хотя установка предела размера заставит файлы вращаться чаще). Сказав, что для большинства серверов ротация журналов является разрушительной; если ваша цель - сэкономить место, то было бы целесообразнее сохранить меньше файлов истории и сжать их:

daily rotate 2 compress size 5M create include /etc/logrotate.d

/var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 }
/var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }

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

Не элегантный способ, который работал для меня - запускать logrotate каждый час в зависимости от размера файла, делайте следующее;

1) Скопируйте скрипт Logrotate из папки cron.daily в папку cron.hourly

cp /etc/cron.daily/logrotate   /etc/cron.hourly/ 

2) Обновите файл /etc/cron.hourly/logrotate; закомментируйте и замените последнюю строку следующим образом

#/usr/sbin/logrotate /etc/logrotate.conf
/usr/sbin/logrotate  /etc/logrotate.d/logstash 

3) обновите соответствующую запись в /etc/crontab следующим образом (если требуется)

#17 *   * * *   root    cd / && run-parts --report /etc/cron.hourly
59 *    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.hourly )

4) Наконец, напишите следующую логику в файле conf logrotate (обновите пути к папкам и размер в соответствии с вашими требованиями)

 cat /etc/logrotate.d/logstash
    /var/log/logstash/*.log /var/log/logstash/*.err  {
    hourly
    size 10M
    rotate 4
    copytruncate
    compress
    #delaycompress
    missingok
    notifempty }
Другие вопросы по тегам