Ведением логов занимается демон syslog, а их ротацией – утилита newsyslog.
Демон syslog работает постоянно, и запускается при старте системы.
Утилита newsyslog – запускается по cron, раз в час, если не указано иначе:
# cat /etc/crontab | grep log # Rotate log files every hour, if necessary. 0 * * * * root newsyslog
newsyslog -n - в таком случае он не будет выполнять ротацию, а только отобразит какие действия будут выполнены
newsyslog -v - подробный режим
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/all.log 600 7 * @T00 J
logfilename – обязательный параметр, полный путь к файлу лога, который необходимо проверять;
owner:group – необязательный параметр, владелец/группа, которой принадлежит файл;
mode – права доступа к файлу;
count – сколько копий заархивированных файлов хранить;
size – предельный размер файла лога в килобайтах, после которого он будет заархивирован и создан новый, для указания “любой размер” – установите *;
when – время в часах, через которое файл будет заархивирован, даже если его размер не превысил заданный в size, что бы игнорировать опцию – установите *;
flags – флаги:
B – по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог, с параметром B newsyslog не будет добавлять никаких сообщений в лог;
C – если лог-файл не существует, то его необходимо создать;
G – если указан данный флаг, то в названии лог-файла можно использовать стандартные шаблоны (например *);
J – сжимать лог-файл, используя bzip2;
N – не предупреждать никакой процесс, о ротации лог-файла;
W – если используются флаги Z или J, то newsyslog должен подождать, пока завершится процесс архивации;
Z – сжимать лог, используя gzip
@17T00 – выполнять 17 числа ежемесячно в полночь.
@T22 – выполнять ежедневно в 22:00.
@8T – будет запускать ротацию один раз в час, каждый час
восьмого числа каждого месяца и так на протяжении целого дня.
Такая запись может пригодиться для отладки, но вряд ли будет полезна в нормальном режиме работы. У этой системы имеется один серьезный недостаток – она не дает простого способа задавать ежедневно выполняемые задачи.
Когда требуется запустить ротацию журнала, например, по пятницам, что не является чем-то необычным. Или запустить ротацию журнала в последний день месяца таким образов вообще не удастся. Но это можно сделать благодаря другому формату записи.
Если запись времени начинается со знака доллара $, то считается, что время задается в формате FreeBSD – “месяц-неделя-день”. Такая запись напоминает возможности cron и позволяет вам установить конкретные дни недели для выполнения задачи.
Этот формат использует три буквенных идентификатора:
M (день месяца), W (день недели), H (час дня).
После каждого из них идет число, указывающее точное время запуска.
Часы находятся в интервале от 0 до 23,
дни недели от 0 (воскресенье), до 6 (суббота).
Дни месяца: от 1 и до количества дней в конкретном месяце.
$W5H23 - ротация по пятницам за час до полуночи $M15H03 - ротация 15 числа каждого месяца в 3 часа ночи
Одна интересная функция этой системы позволяет вам автоматически задавать ротацию
на последний день месяца используя специальный “день месяца” – “L” (last – последний).
$MLH22 - ротация журнала за два часа до начала нового месяца