[[ logrotate - утилита для архивации log-файлов ]]

logrotate - утилита для архивации log-файлов

Осуществляет автоматическую архивацию (ротацию) log-файлов.

Описание

В планировщике задач (cron) ежедневно выполняется запуск logrotate

/usr/sbin/logrotate /etc/logrotate.conf

с указанием файла конфига

В конфиге настраиваются глобальные параметры, которые будут применяться по умолчанию, и как правило подключается директория

include /etc/logrotate.d
откуда будут подружатся файлы с описанием правил (секции) для конкретных лог файлов.

При ротации логов - текущий log-файл с которым работает программа - удаляется или перемещается, поэтому после ротации лога, будет правильным перезапустить программу/сервис, чей log-файл был удален. Нужно это, что бы программе был сообщен новый дискриптор файла. Хотя это ситуация может разрулится автоматически и без перезагрузки - если такую ситуацию предусмотрели разработчики.

Каждому архивному файлу присваивается номер, чем больше номер тем 'старее' архив.

Параметры запуска

Параметр Описание
-d debug - отладочный режим.
В режиме отладки не будут производиться изменения в log-файле и файле состояния
-f
--force
Принудительно произвести ротацию, даже если в данный момент она не требуется
-m <команда>
--mail <команда>
Указать команду для отправки почты.
Команда должна принимать два аргумента: тема сообщения и адрес получателя.
Текст письма передается стандартным вводом (stdin).
По умолчанию /usr/bin/mail -s
-s <файл>
--state <файл>
Указать куда записать файл состояния.
Что - то типа лога, показывает последнюю дату когда производилась ротация
(если создания архива не требуется правилами, то дата все ровно обновляется)
По умолчанию /var/lib/logrotate/status



Настройка

Описание секции начинается с указания файлов над которыми будет производится ротация, а параметры указываются в фигурных скобах.
Можно указывать по маске:

/var/log/apache2/*.log {
...
}
или конкретные файлы
/var/log/apache2/access.log  /var/log/apache2/error.log  {
...
}

Ротацию можно производить по расписанию (ежедневно, еженедельно …) или по достижению определенного размера log-файлом - это взаимоисключающие параметры.

Параметр Описание
rotate <число> Количество старых файлов, которые нужно хранить
hourly
daily
weekly
monthly
yearly
Как часто производить ротацию, раз в час, день, неделю, месяц, год.
До версии 3.8.1 несовместим с size
size <байт>
size 1000
size 100k
size 1M
Производить ротацию если log-файл превысил указанный размер.
До версии 3.8.1 несовместим с hourly, daily, weekly, monthly, yearly
start <число> число с которого начнётся нумерация файлов
compress Архивировать файлы (по умолчанию gzip)
nocompress Отключает: compress
delaycompress Не сжимать 'свеже' созданный архив. Например access.log.1 не будет зжат.
Зависимость: compress
Несовместимость: nocompress
create <права><владелец><группа>
create 640 root root
После ротации создать пустой log-файл. Любые из этих атрибутов могут быть опущены,
в этом случае вместо них для нового файла будут использованы атрибуты,
имеющие те же значения, что и первоначальный log-файл
nocreate Не создавать пустой файл после ротации.
Отключает: create
copy Создать копию оригинального log-файла, не изменяя его.
Несовместимость: create
nocopy Отключает: copy
copytruncate Создать копию оригинального log-файла, а потом его 'обнулить'.
Таким образом сам файл не удаляется и не меняется его дескриптор.
Несовместимость: create
ifempty Архивирует даже пустой файл (используется по умолчанию)
notifempty Не архивировать пустые файлы.
Отключает: ifempty
Несовместимость: size
missingok В случае отсутствия оригинального log-файла не вызовет ошибку
nomissingok В случае отсутствия оригинального log-файла вызовет ошибку.
Отключает: missingok
postrotate
<команды>
endscript
Строки, находящиеся между postrotate и endscript
будут выполнены как sh скрипт после архивирования log-файла
prerotate
<команды>
endscript
Аналогично postrotate, только действия будут выполнены до начала архивирования
sharedscripts Скрипты postrotate и prerotate будут выполнены только один раз в рамках своей секции.
nosharedscripts Отключает sharedscripts.
Скрипты будут выполняются при ротации каждого log-файла,
при определение /var/log/apache2/*.log скрипт будет выполнен столько раз
сколько уникальных log-файлов будет находится в данной директории
olddir <путь> Перемещать архивные файлы в указанную директорию
noolddir Отключает olddir
dateext К имени файлов журналов добавляется дата (%Y%m%d), вместо номера
su <user> <group> Выполняется с правами указанного пользователя. Необходимо если ошибка: «because parent directory has insecure permissions», т.е. на директорию с логами, есть право на запись кроме root'a
mail <mail@domain.com> Отправляет ротированные логи на почту. Локально должна быть настроена MTA sendmail или т.п.
nomail Отключает mail

Пример

Глобальный конфиг

/etc/logrotate.conf

create
compress

include /etc/logrotate.d

Ротация логов Апача

/etc/logrotate.d/apache2

/var/log/apache2/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                # Скрипт на перезагрузку Апача
                if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                        /etc/init.d/apache2 reload > /dev/null
                fi
        endscript
}

Обсуждение

sm1ly, 2012/07/12 15:58

премного благодарю, очень здорово расписано и очень помогло!

Сергей, 2013/06/10 10:15

Хороший материал

Yuliya, 2013/07/19 11:50

Спасибо! за хороший материал

z, 2013/09/06 14:43

olddir не перемещает лог на другой физический диск, будьте внимательны, пришлось столкнуться с этим

albgun, 2013/09/19 09:40

а как указать для использования другого архиватора вместо gzip

Aleksey, 2013/10/01 16:44, 2013/10/01 16:45
compresscmd     /usr/bin/pbzip2
uncompresscmd   /usr/bin/pbunzip2
compressext     .bz2
Aleksey, 2014/03/19 12:58
cat /var/lib/logrotate.status
Роман, 2014/03/28 20:51

Да классно описано, только я не понял, а можно ли ежедневно переименовывать например файл error.log в error_YYYY-MM-DD.log, где YYYY - год, MM - месяц, DD - день? ну и для access.log тоже самое

Djoe, 2019/10/07 09:18

dateext К имени файлов журналов добавляется дата (%Y%m%d), вместо номера

Ваш комментарий. Вики-синтаксис разрешён:
17 -1 = 
 
tools/system/logrotate.txt · Последнее изменение: 2023/09/11 18:13 — lexa
Gentoo Linux Gentoo Linux Driven by DokuWiki