Ротация логов newsyslog

Источник: http://www.sergeyka.h10.ru/newsyslog.html

Про поле when. Чёрт ногу сломит :)

Если в поле будет число, то newsyslog будет проводить ротацию по прошествии указанного количества часов. Например, если вы хотите, что бы ротация проводилась каждые 24 часа, и вам не важно в какое именно время, то просто поставьте в это поле число <24>.

Если поле начинается символом <@>, то считается что время представлено в формате ISO-8601, этот стандарт используется newsyslog в большинстве Unix-подобных операционных систем. Этот формат использовался первой версией newsyslog разработанной в MIT (Массачусетский Технологический Институт – прим. переводчика). На первый взгляд этот формат не совсем понятен. Но, поскольку это стандарт, FreeBSD его поддерживает.

Полная запись даты в формате ISO-8601 состоит из 16 цифр с буквой <T> в середине. Первые четыре цифры означают год, следующие две – месяц, и еще две – день месяца. Буква <T> идет после даты, отделяя ее от времени, как десятичная точка в вещественных числах отделяет дробную часть от целой. После буквы <T> идут две цифры часа, затем две цифры минут и наконец две цифры секунд. Например дата 2 февраля 2002 года, 21:15:08, в формате ISO-8601будет выглядеть следующим образом: 20020202T211508
Вы обязательно должны ставить букву <T> в ISO-8601-дате.

Указание полных дат в формате ISO-8601 просто и очевидно. Путаница начинается, когда вы не пишете полную дату. Вы можете указать поля даты только рядом с буквой <T>, оставив остальное место незаполненным. Все неуказанные поля не будут учитываться при сравнении.

Например T23 значит – любой день в году, 23:00. Если вы напишете в newsyslog.conf @T23, то ротация этого журнала будет проводиться каждый день, ровно в 23:00. Запись 4T00 значит полночь 4 числа каждого месяца, таким образом @4T00 будет запускать ротацию в это время.

Так же как при работе с crontab вам следует уточнить часы ротации. Указание даты типа @7T будет запускать ротацию один раз в час, каждый час седьмого числа каждого месяца. Таким образом такая дата будет запускать ротацию раз в час на протяжении целого дня. Это может быть полезно для отладки, но вряд ли пригодится в реальной жизни.

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

Если запись времени начинается со знака доллара “$”, то считается, что время задается в специфическом FreeBSD-формате <месяц-неделя-день>. Это очень похоже на cron и позволяет вам установить конкретные дни недели для выполнения задачи.

Этот формат использует три буквенных идентификатора: M (день месяца), W (день недели), H (час дня). После каждого из них идет число, указывающее точное время запуска. Часы находятся в интервале от 0 до 23, дни недели от 0 (воскресенье), до 6 (суббота). Дни месяца: от 1 и до количества дней в конкретном месяце.

Например для запуска ротации каждое воскресение в 8 утра вам следует задать время как $W0H8. Если вы захотите ротировать журналы в полдень 5 числа каждого месяца, то напишите $M5H12.

Одна интересная функция этой системы позволяет вам автоматически задавать ротацию на последний день месяца используя специальный <день месяца> – <L> (от last – последний. Прим. переводчика). Без этого знака было бы очень трудно задать ротацию журнала в последний день месяца без написания скрипта, который бы вставлял количество дней в конкретном месяце. Если вы хотите запустить ротацию вашего журнала аккаунтов за два часа до начала нового месяца, вы должны использовать запись $MLH22.

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s