Приветствую Вас, воришка
Главная » 2013 » Август » 16 » FREEBSD. Автоматическая архивация (ротация) log-файлов с помощью logrotate
10:54
FREEBSD. Автоматическая архивация (ротация) log-файлов с помощью logrotate
 Автоматическая архивация (ротация) log-файлов с помощью logrotate

 У наших пользователей есть возможность архивировать файлы журналов
 web-сервера (access.log, errors.log, либо других) с помощью
 модифицированной утилиты logrotate(8). Этот процесс обычно
 называется "ротация логов".

 Ротация логов служит для контроля размера дискового пространства,
 занимаемого журналами. Утилиту logrotate, которая это делает,
 обычно запускают с помошью планировщика заданий crond. В
 результате работы logrotate остается один активный файл журнала (в
 который "сейчас" происходит запись со стороны сервера) и несколько
 архивных файлов, сжатых специальным упаковщиком. Обычно это
 выглядит так:

 access.log, access.log.1.lzo, access.log.2.lzo, ... access.log.10.lzo

 Здесь access.log - текущий, access.log.1.lzo - самый новый архив,
 access.log.10.lzo - самый старый архив.

 Утилита logrotate находится в каталоге /opt/sbin/logrotate. Для ее
 работы необходим специальный файл настроек. В нем перечисляются
 файлы журналов, которые необходимо архивировать, и все
 ассоциированные с ними параметры.

 Далее приведен пример файла настроек (etc/logrotate.conf). 
 
"/home/<user-www>/logs/access.log"
{
 rotate 10 # кол-во хранимых сжатых фрагментов
 size=16M # максимальный размер несжатого файла; пока размер текущего
 # файла журнала не превысит данный порог, файл не будет "ротирован"
 missingok # отсутствие файла не является ошибкой
 nocopytruncate # не сбрасывать файл журнала после копирования
 nocreate # не создавать пустой журнал
 nodelaycompress # не откладывать сжатие файла на следующий цикл
 nomail # не отправлять содержимое удаляемых (старых) журналов по почте
 notifempty # не обрабатывать пустые файлы
 noolddir # держать все файлы в одном и том же каталоге
 compress # сжимать
 postrotate
 /usr/bin/killall -HUP httpd
 endscript # Между postrotate и endscript расположены команды
 # интерпретатора sh(1), исполняемые непосредственно после ротации.
 # В данном примере сюда помещена команда kill, перезапускающая
 # httpd-сервер. Это необходимо для нормальной процедуры
}

"/home/<user-www>/logs/errors.log"
{

 rotate 4 # кол-во хранимых сжатых фрагментов
 weekly # игнорировать размер файла; производить ротацию регулярно, раз в неделю
 missingok
 nocopytruncate
 nocreate
 nodelaycompress
 nomail
 notifempty
 noolddir
 compress
 postrotate
 /usr/bin/killall -HUP httpd
 endscript

}

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

 access.log
 Для журнала access.log в примере выбран второй подход, по
 достижению файлом размера 16 мегабайт. Если утилита
 обнаруживает данный факт, ротация происходит. Всего система
 хранит 10 архивных фрагментов. Самый старый удаляется.

 errors.log
 Журнал диагностики errors.log ротируется регулярно, раз в
 неделю. Система хранит 4 архивных фрагмента (за месяц), самый
 старый удаляется.

 Полное описание формата файла можно просмотреть по этой команде:
 $ man 8 logrotate
Просмотров: 2068 | Добавил: Эльф | Рейтинг: 0.0/0
Всего комментариев: 2
16.08.2013
2. Эльф
[Материал]
конфиг /usr/local/etc/logrotate.conf:

16.08.2013
1. Эльф
[Материал]
попробуйте не всех апачам сигнал давать, а только родителю 
killall -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]