LOGROTATE

НАЗВАНИЕ
ОБЗОР
ОПИСАНИЕ
ОПЦИИ
КОНФИГУРАЦИОННЫЙ ФАЙЛ
ФАЙЛЫ
СМОТРИ ТАКЖЕ
ЗАМЕЧАНИЯ
АВТОРЫ
АВТОРЫ ПЕРЕВОДА

НАЗВАНИЕ

logrotate − ротирует, сжимает и шлёт системные журналы по почте

ОБЗОР

logrotate [−dv] [−f|−−force] [−s|−−state файл_состояния] файл_конфигурации ..

ОПИСАНИЕ

logrotate предназначена для лёгкого администрирования систем, генерирующих большое количество журналов. Она позволяет автоматически ротировать, сжимать, удалять и пересылать журналы. Каждый файл журнала может обрабатываться ежедневно, еженедельно, ежемесячно или когда он становится слишком большим.

Обычно logrotate запускается ежедневно службой cron. Он будет изменять журнал чаще раза в день, если условия ротации журнала используют размер журнала, а logrotate будет запускаться чаще раза в день или если используется опция −f или −−force.

В командной строке может быть указано любое количество файлов конфигурации. Более поздний конфигурационный файл может отменять опции заданные более ранним, так что порядок перечисления конфигурационных файлов logrotate важен. Обычно используется один конфигурационный файл, который, в свою очередь, подключает другие необходимые конфигурационные файлы. Более подробное описание способа использования директивы include приведено ниже. Если в командной строке указан каталог, каждый файл в этом каталоге используется как конфигурационный файл.

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

ОПЦИИ

−?, −−help

Вывести справку по использованию.

−d, −−debug

Включить отладочный режим, так же это подразумевает опцию −v. В режиме отладки не будут производиться изменения в журналах и файле состояния logrotate.

−f, −−force

Сообщает logrotate принудительно выполнить ротацию, даже если он не считает это необходимым. Иногда это полезно после добавления новых записей в конфигурационный файл logrotate, или если старые файлы журналов были удалены вручную, так что будут созданы новые файлы и журналирование продолжится корректно.

−m, −−mail <команда>

Сообщает logrotate какую команду использовать для отправки журналов. Эта команда должна принимать два аргумента: 1) тема сообщения, и 2) получатель. Затем команда должна прочитать сообщение со стандартного ввода и отправить его получателю. По умолчанию в качестве команды отправки используется /usr/bin/mail −s.

−s, −−state <файл_состояния>

Сообщает logrotate использовать другой файл состояния. Это полезно если logrotate запускается разными пользователями для разных наборов журнальных файлов. По умолчанию файлом состояния является /var/lib/logrotate/status.

−−usage

Вывести короткую справку по использованию.

−v, −−verbose

Выводить сообщения во время ротации.

КОНФИГУРАЦИОННЫЙ ФАЙЛ

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

#простой конфигурационный файл
compress

/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall −HUP syslogd
endscript
}

"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size 100k
sharedscripts
postrotate
/usr/bin/killall −HUP httpd
endscript
}

/var/log/news/* {
monthly
rotate 2
olddir /var/log/news/old
missingok
postrotate
kill −HUP ’cat /var/run/inn.pid’
endscript
nocompress
}

~/log/*.log {}

Первые несколько строк устанавливают глобальные опции; в примере журналы после ротации будут сжаты. Учтите, что комментарии, начинающиеся cо знака # и заканчивающиеся концом строки, могут появляться в любом месте конфигурационного файла.

Следующий раздел конфигурационного файла определяет как обрабатывать файл журнала /var/log/messages. Журнал будет проходить через пять еженедельных ротации, прежде чем будет удалён. После ротации файла журнала (но перед тем как старая версия журнала будет сжата), будет выполнена команда /sbin/killall −HUP syslogd.

Следующий раздел определяет параметры для файлов /var/log/httpd/access.log и /var/log/httpd/error.log. Каждый из них подвергается ротации, когда их размер достигает 100k, а старые файлы журналов после прохождения 5 ротаций пересылаются (несжатыми) на адрес www@my.org, прежде чем они будут удалены. sharedscripts означает что сценарий postrotate будет запущен один раз (после сжатия старых файлов журналов), но не по одному разу для каждого ротируемого журнала. Отметим, что имена файлов журналов можно заключать в кавычки (но кавычки обязательны, если имя содержит пробелы). Применимы обычные правила оболочки для заключения в кавычки, поддерживаются символы , ", и \.

Следующий раздел определяет параметры для всех файлов в /var/log/news. Каждый файл подвергается ежемесячной ротации. Это задаётся с помощью единственной директивы ротации, а если происходит ошибка более чем в одном файле, файлы журналов не сжимаются.

Последний раздел использует подстановку тильды для ротации файлов журналов в домашнем каталоге текущего пользователя. Это возможно только если используемая библиотека glob поддерживает подстановку тильды. GNU glob подстановку тильды поддерживает.

Будьте осторожны при использовании шаблонов. Если вы укажете *, logrotate произведет ротацию всех файлов, включая уже обработанные. Чтобы избежать этого, воспользуйтесь директивой olddir или более точным шаблоном (например *.log).

Если каталог /var/log/news не существует, то logrotate сообщит об ошибке. Такое сообщение не может быть отключено с помощью директивы missingok.

Далее следует более подробная информация о директивах, которые могут быть включены в конфигурационный файл logrotate:
compress

Сжать старые файлы журналов. По умолчанию − с помощью gzip(1). Смотрите также описание опции nocompress.

compresscmd

Указывает команду, с помощью которой происходит сжатие файлов журналов. По умолчанию это gzip(1). Смотри так же compress.

uncompresscmd

Указывает команду, с помощью которой производится разжатие файлов журналов. По умолчанию gunzip(1).

compressext

Указывает расширение, которое используется для сжатых файлов журналов, если сжатие включено. Умолчание зависит от настроенной команды сжатия.

compressoptions

Опции командной строки, которые будут переданы программе сжатия, если она используется. По умолчанию для gzip(1) это "−6" (жертвует степенью сжатия в пользу скорости). Если используется другая команда сжатия, нужно соответствующим образом поменять значение опции compressoptions.

copy

Сделать копию файла журнала, но не изменять исходный. Эта опция может пригодиться, например, для создания мгновенного снимка текущего файла журнала, или когда другой утилите необходимо обрезать или уменьшить файл. При использовании этой опции, опция create не действует, так как старый файл журнала остается на месте.

copytruncate

После создания копии обрезать исходный файл журнала на месте до нулевого размера, вместо перемещения старого файла журнала и возможного создания нового файла. Это может использоваться когда некой программе нельзя приказать закрыть свой журнал и, следовательно, она может бесконечно продолжать добавлять записи к старому файлу журнала. Отметим, что есть очень маленький временной промежуток между копированием файла и его обрезанием, так что часть журнальных данных может быть потеряна. При использовании этой опции, опция create не действует, так как старый файл журнала остается на месте.

create режим владелец группа, create владелец группа

Сразу после ротации (до запуска сценария postrotate) создать файл журнала (с таким же именем, как у только что ротированного файл журнала). Поле режим определяет режим для файла журнала в восьмеричном представлении (как в chmod(2)), поле владелец определяет имя пользователя который является владельцем этого файла журнала, и поле группа определяет группу, которой принадлежит файл журнала. Любой из этих атрибутов может быть пропущен, в таком случае для пропущенных атрибутов будут использоваться атрибуты исходного файла журнала. Эта опция может быть отключена с помощью опции nocreate.

daily

Ежедневная ротация файлов журналов.

dateext

К архиву старых версий файлов журналов ежедневно добавляется расширение подобное ГГГГММДД вместо простого добавления номера. Расширение можно настроить при помощи опций dateformat и dateyesterday.

dateformat строка_формата

Указать расширение для dateext с использованием строки формата, похожей на ту, которая используется в функции strftime(3). Допускаются только символы подстановки %Y %m %d и %s. По умолчанию используется расширение по формату −%Y%m%d. Отметим также, что символ, отделяющий имя журнала от расширения, является частью строки формата даты. Для того, чтобы символ подстановки %s работал правильно, системыне часы должны быть установлены на дату после 9 сентября 2001 года. Отметим, что отметки даты, генерируемые при помощи этой строки формата, должны поддаваться алфавитной сортировке. То есть, сначала должен идти год, затем месяц и потом день. Например, 2001/12/01 − это правильный формат, но 01/12/2001 уже не подходит, потому что 01/11/2002 в результате сортировки встретится раньше, хотя дата более поздняя. Это необходимо, потому что опция rotate сортирует все имена файлов для ротации, чтобы найти наиболее старые файлы, которые требуется удалить.

dateyesterday

Использовать вчерашнюю дату вместо сегодняшней для создания расширения dateext, так что файл журнала, подвергнувшийся ротации, будет содержать в имени дату, совпадающую с отметками времени внутри него.

delaycompress

Отсрочка сжатия предыдущего файла журнала на следующий цикл ротации. Эта опция действует только совместно с опцией compress. Она может использоваться когда некой программе нельзя указать закрыть её файл журнала и таким образом она может продолжать писать в старый журнал на протяжении некоторого времени.

extension расширение

После ротации имена файлов журналов дополняются расширением расширение. Если используется сжатие, расширение архиватора (обычно .gz) добавляется после него. Например, имеется файл журнала с именем mylog.foo, а вы хотите, чтобы при ротации его именя изменилось на mylog.1.foo.gz, а не на mylog.foo.1.gz.

hourly

Файлы журналов ротируются каждый час. Отметим, что обычно logrotate настраивается на ежедневный запуск из cron. Вы можете поменять эту настройку и запускать logrotate ежечасно, чтобы по−настоящему ротировать эти журналы ежечасно.

ifempty

Ротация файла журнала, даже если он пустой, отменяет опцию notifempty (ifempty используется по умолчанию).

include файл_или_каталог

Читать указанный в аргументе файл, как если бы он был в том месте, где встретилась директива include. Если указан каталог, файлы из этого каталога будут прочитаны в алфавитном порядке, перед тем как возобновится обработка включающего файла. Игнорируются только те файлы, которые не являются обычными файлами (например, каталоги и именованные каналы) и файлы, имена которых содержат запрещённые расширения, указанные директивой tabooext.

mail адрес

Если файл прошёл полный цикл ротации, то перед уничтожением он будет отправлен на указанный адрес. Если определённый журнал не должен отправляться по почте, можно воспользоваться директивой nomail.

mailfirst

При использовании команды mail, отправлять только что обработанный файл, вместо готовящегося к удалению.

maillast

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

maxage количество

Удалять ротированные файлы журналов, которые старше указанного <количества> дней. Возраст проверяется только если файл журнала будет ротирован. Файлы отправляются по указанному адресу, если maillast и mail были настроены.

maxsize размер

Файлы журнала подвергаются ротации, когда вырастают до размера больше, чем указанный размер в байтах, до указанного временного интервала (daily − ежедневно, weekly − еженедельно, monthly − ежемесячно или yearly − ежегодно). Похожая опция size действует сходным образом, но она не может использоваться совместно с опциями интервалов времени и вызывает ротацию файлов журналов, не обращая внимания на время последней ротации. Если указана опция maxsize, будут учитываться и настройки размера и настройки отметки времени.

minsize размер

Файлы журналов подвергаются ротации, когда вырастают до размера больше, чем указанный размер в байтах, но не перед указанным интервалом времени (daily − ежедневно, weekly − еженедельно, monthly − ежемесячно или yearly − ежегодно). Похожая опция size действует сходным образом, за исключением того, что она не может использоваться совместно с опциями интервалов времени и вызывает ротацию файлов журналов, не обращая внимания на время последней ротации. Если указана опция minsize, будут учитываться и настройки размера и настройки отметки времени.

missingok

Если файл журнала отсутствует, перейти к следующему без создания сообщения об ошибке. Смотри также nomissingok.

monthly

Файлы журналов ротируются при первом запуске logrotate в новом месяце (обычно это первый день месяца).

nocompress

Старые версии файлов журналов не сжимаются. Смотри также compress.

nocopy

Не копировать исходный файл журнала и оставить его на месте (это перекрывает опцию copy).

nocopytruncate

Не обрезать исходный файл журнала на месте после создания копии (это перекрывает опцию copytruncate).

nocreate

Новые файлы журнала не создаются (это перекрывает опцию create).

nodelaycompress

Не выполнять отложенное сжатие предыдущих файлов журналов в следующем цикле ротации (это перекрывает опцию delaycompress).

nodateext

Не архивировать старые версии файлов журналов с расширением−датой (перекрывает действие опции dateext).

nomail

Не отправлять старые файлы журналов на какой−либо адрес.

nomissingok

Если файл журнала не существует, вызывает ошибку. Это опция используется по умолчанию.

noolddir

Журналы ротируются в каталоге, в котором они обычно находятся (это перекрывает опцию olddir).

nosharedscripts

Запустить сценарии prerotate и postrotate для каждого файла журнала, подвергнутому ротации (это поведение используется по умолчанию и оно перекрывает опцию sharedscripts). Абсолютный путь к файлу журнала передаётся сценарию в качестве первого аргумента. Если сценарий завершился с ошибкой, оставшиеся действия не будут выполнены только для того файла журнала, обработка которого завершилась ошибкой.

noshred

Не использовать программу shred при удалении старых файлов журналов. Смотрите также описание опции shred.

notifempty

Не ротировать журнал если он пуст (это перекрывает опцию ifempty).

olddir каталог

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

postrotate/endscript

Строки между postrotate и endscript (каждая из которых должна располагаться в отдельной строке) выполняются после ротации файла журнала при помощи /bin/sh. Эти директивы могут встретиться только внутри определения файла журнала. Обычно абсолютный путь к файлу журнала передаётся сценарию в качестве первого аргумента. Если указана опция sharedscripts, в сценарий передаётся весь шаблон. Смотрите также описание опции prerotate. Обратитсеь к описанию опций sharedscripts и nosharedscripts за подробностями об обработке ошибок.

prerotate/endscript

Строки между prerotate и endscript (каждая из которых должна находиться в одной строке) выполнятся при помощи /bin/sh перед ротацией файла журнала и только если журнал будет действительно ротирован. Эти директивы могут встречаться только внутри определения файла журнала. Обычно абсолютный путь к файлу журнала передаётся в сценарий в качестве его первого аргумента. Если указана опция sharedscripts, весь шаблон будет передан в сценарий. Смотрите также описание опции postrotate. Обратитесь к описанию опций sharedscripts и nosharedscripts за подробностями об обработке ошибок.

firstaction/endscript

Строки между firstaction и endscript (каждая из которых должна находиться в одной строке) выполняются единожды при помощи /bin/sh перед ротацией всех файлов журналов, совпадающих с шаблоном, перед запуском сценария prerotate и только если хотя бы один журнал действительно будет ротирован. Эти директивы могут встречаться только внутри определения файла журнала. Смотри также lastaction. Весь шаблон передаётся сценарию в качестве первого аргумента. Если сценарий завершился с ошибкой, дальнейшая обработка не выполняется. Смотрите также описание опции lastaction.

lastaction/endscript

Строки между lastaction и endscript (каждая из которых должна находиться в одной строке) выполняются единожды при помощи /bin/sh после того, как все файлы журналов, совпадающие с шаблоном, были ротированы, после запуска сценария postrotate и только если хотя бы один журнал был ротирован. Эти директивы могут встречаться только внутри определения файла журнала. Весь шаблон передаётся сценарию в качестве первого аргумента. Если сценарий завершился с ошибкой, дальнейшая обработка не выполняется. Смотри также firstaction.

preremove/endscript

Строки между preremove и endscript (каждая из которых должна занимать отдельную строку) выполняются (при помощи /bin/sh) единожды перед удалением файла журнала. logrotate передаёт имя файла, который будет удалён. См. также firstaction.

rotate количество

Файлы журнала ротируются указанное количество раз перед тем, как будут удалены или отправлены на адрес, указанный в директиве mail. Если количество равно нулю, прежние версии удаляются, а не ротируются.

size размер

Файлы журналов будут ротированы только если они выросли больше указанного размера в байтах. Если использована буква k, то размер указан в килобайтах. Если размер указан с буквой M, подразумевается размер в мегабайтах. Если используется буква G, то размер указан в гигабайтах. Директивы size 100, size 100k, size 200M и size 1G будут распознаваться верно.

sharedscripts

Обычно сценарии prerotate и postrotate выполняются для каждого ротируемого файла журнала, а абсолютный путь к файлу журнала передаётся в качестве первого аргумента сценария. Это означает, что один сценарий может быть запущен несколько раз для тех файлов журналов, которые совпали с шаблоном (например /var/log/news/*). Если указана опция sharedscripts, сценарии запускаются только один раз, вне зависимости от того, как много журналов совпало с шаблоном, а сценарию передаётся весь шаблон. Однако, если ни один из журналов по шаблону не требует ротации, сценарий всё же не будет запущен. Если сценарий завершится с ошибкой, оставшиеся действия не будут выполнены ни для одного файла журнала. Эта опция перекрывает действие опции nosharedscripts и подразумевает опцию create.

shred

Удалять файлы журналов при помощи программы shred −u, а не при помощи системного вызова unlink(). Эта опция позволяет быть уверенным в том, что после запланированного удаления файлы больше нельзя будет прочитать. По умолчанию эта опция не используется. Смотрите также описание опции noshred.

shredcycles количество

Перед удалением вызвать программу GNU shred(1) для перезаписи содержимого файлов журналов указанное в опции количество раз. Если эта опция не указана, используются настройки shred по умолчанию.

start начало

Начало − это число, используемое как основа ротации. Например, если вы укажете 0, журналы, полученные при ротации из исходных файлов журналов, будут создаваться начиная с расширения .0. Если вы укажете 9, файлы журналов будут создаваться начиная с расширения .9, пропуская 0−8. Файлы по−прежнему будут подвергаться ротации столько раз, сколько указано в директиве rotate.

su пользователь группа

Выполнить ротацию файлов журналов от имени указанного пользователя и группы вместо использования пользователя и группы по умолчанию (обычно это root). Значение пользователь указывает имя пользователя, используемого для ротации, а группа указывает группу, используемую для ротации. Если указанный пользователь или группа не обладают достаточными правами для создания файлов с указанным в инструкции create владельцем, то произойдёт ошибка.

tabooext [+] список

Изменить текущий список запрещённых расширений (обратитесь к директиве include за информацией по запрещённым расширениям). Если список предваряет +, текущий список запрещённых расширений дополняется указанным списком, иначе − замещается. При начальной загрузке список запрещённых расширений содержит rpmsave, .rpmorig, ~, .disabled, .dpkg−old, .dpkg−dist, .dpkg−new, .cfsaved, .ucf−old, .ucf−dist, .ucf−new, .rpmnew, .swp, .cfsaved, .rhn−cfg−tmp−*

weekly

Файлы журналов подвергаются ротации, если текущий день недели меньше дня недели последней ротации или если со времени последней ротации прошло больше недели. Обычно это действие равноценно ротации журналов в первый день недели, но работает лучше, если logrotate не запускается каждую ночь.

yearly

Файлы журналов подвергаются ротации, если нынешний год не совпадает с годом прошлой ротации.

ФАЙЛЫ

/var/lib/logrotate.status

Файл состояния по умолчанию.

/etc/logrotate.conf

Настроечные опции.

СМОТРИ ТАКЖЕ

gzip(1)

ЗАМЕЧАНИЯ

Программа killall(1) в Debian находится в пакете psmisc.

АВТОРЫ

Эрик Троан (Erik Troan), Престон Браун (Preston Brown), Ян Калужа (Jan Kaluza).

<logrotate−owner@fedoraproject.org>
<http://fedorahosted.org/logrotate/>

Исправления и изменения для Debian внёс Пол Мартин (Paul Martin) <pm@debian.org>

АВТОРЫ ПЕРЕВОДА

Перевод выполнен на сайте коллективных переводов http://translated.by. Авторы перевода Владимир Ступин <vladimir@stupin.su>, Олег Безначев aka saturn721.