Думаю каждый системный администратор осознает неоценимую помощь от лог файлов, особенно при отладке системы или софта. Но наступает момент, когда лог файл может вырасти до неприемлемо большого размера. И тут приходит в голову мысль - а почему бы не сделать ротацию лог файла? Для решения этой задачи в системе предусмотрена специальная утилита - newsyslog, которая осуществляет ротацию логов в системе. Утилита не работает как демон, а запускается по крону, о чем свидетельствует следующая запись в /etc/crontab:
# Rotate log files every hour, if necessary.
0 * * * * root newsyslog
По умолчанию для newsyslog конфигурационный файл находится здесь - /etc/newsyslog.conf. Формат файла довольно прост - в одной строке в нескольких колонках указываются необходимые параметры для ротации одного лог файла. Описание колонок:
- logfilename - путь к лог файлу.
- owner:group (опционально) - владелец и группа, устанавливаемые на файл и на архивные копии после ротации.
- mode - права доступа, устанавливаемые на файл и на архивные копии после ротации.
- count - количество архивных копий лог файла.
- size - размер лог файла, при достижении которого нужно осуществить ротацию файла. Если в данном поле указана звездочка '*', то правила ротации определяются полем when.
- when - когда (время) осуществлять ротацию лог файла. Формат поля подробно описан в мане. Если в данном поле указана звездочка '*', то правила ротации определяются полем size.
- flags - поле, в котором указываются дополнительные опции для ротации лог файла. Доступные опции:
- B - означает, что идет работа с бинарным файлом. Это значит, что newsyslog не будет добавлять информационное сообщение (о том, когда была осуществлена ротация) в начало файла.
- C - означает, что надо создать лог файл, если он не существует. Чтобы это работало, нужно запускать newsyslog с ключом -C.
- D - установить флаг UF_NODUMP (влияет на работу команды dump) на лог файл после ротации.
- G - означает, что файл это шаблон оболочки (подробнее в мане).
- J - упаковывать архивные копии, используя bzip2.
- N - означает, что нет процесса, который должен быть оповещен при ротации.
- U - означает, что в файле pid_file хранится идентификатор группы процессов, а не одного процесса.
- R - воспринимать pid_file как скрипт и запустить его после ротации.
- X - упаковывать архивные копии, используя xz.
- Z - упаковывать архивные копии, используя gzip.
- - (минус) - ни на что не влияет, служит только как заглушка. То есть, если нет необходимости указывать опции, но нужно задать следующие поля.
- /pid_file (опционально) - путь до pid файла процесса.
- sig_num (опционально) - номер сигнала, который необходимо послать процессу после ротации (man signal).
Допустим мне необходимо сделать ротацию двух лог файлов mainlog и rejectlog, которые ведет Exim. Для этого необходимо внести в конфигурационный файл /etc/newsyslog.conf такие строчки:
/var/log/exim/mainlog mailnull:mail 640 30 102400 * JN
/var/log/exim/rejectlog mailnull:mail 640 30 102400 * JN
Данные записи означают, что при достижении размера любого лог файла в 10 мегабайт осуществить их ротацию, причем установить владельца и группу - mailnull:mail, установить права на файл 640, количество архивных копий не должно превышать 30 и архивные копии должны быть упакованы в архив bzip2.
Добавить комментарий