Colobridge WIKI

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

Пример Глобальный конфиг

/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

}


Актуальность: 2015/12/22 13:30