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 }