Денис Колисниченко - Linux: Полное руководство
Анализ сообщений ядра может потребоваться для того, чтобы узнать, поддерживает ли ваше ядро то или иное устройство или функцию. Например, чтобы узнать, включена ли поддержка квотирования (п.7.2.3), выполните команду
$ dmesg | grep -i quot
Сообщения, которые ядро генерирует и сохраняет в буфере во время загрузки системы, направляются также в файл /var/log/dmesg (в не Red Hat-совместимых системах этот файл может называться /var/log/boot.msg). По окончании загрузки этот файл закрывается и его содержимое становится доступно для просмотра и анализа.
9.3.4. Что делать с протоколами дальше? Утилита logrotate
Журнальные файлы разрастаются быстро, и рано или поздно с ними приходится что-то делать: сжимать, архивировать или просто удалять. В дистрибутивах линии Red Hat и Debian для управления журналами — не только системы syslog, но и любых прикладных программ, — предназначена утилита logrotate. Она устанавливается из пакета logrotate вместе с примерным конфигурационным файлом и сценарием, обеспечивающим ее периодический запуск (п.9.4). В результате установки этого пакета сценарий logrotate попадает в каталог /etc/cron.daily.
Как следует из названия утилиты logrotate, ее основное занятие — это ротация журнальных файлов. Ротация — это последовательное переименование предыдущих версий журналов (maillog.2 a maillog.3, maillog.1 в maillog.2, maillog в maillog.1) и создание нового пустого журнального файла (maillog) для записи последующих сообщений. Ротация производится либо по истечении указанного времени, либо по превышении журнальным файлом указанного размера.
Список журналов, подлежащих обработке утилитой logrotate, и инструкции по обработке определяются конфигурационными файлами, имена которых в любом количестве передаются как аргументы при вызове утилиты (см. man logrotate). Директивы последующих конфигурационных файлов перекрывают директивы предыдущих, так что порядок имеет значение. Традиционно используется один файл /etc/logrotate.conf, а инструкции для дополнительных журналов включаются в него при помощи директивы include.
Листинг 9.5. Примерный конфигурационный файл /etc/logrotate.conf
# Секция глобальных параметров —
# инструкции для всех журналов
# Расписание ротации: еженедельно.
# Возможны варианты: daily, monthly,
# size <байт> — по достижении файлом указанного размера
weekly
# Сохранять 4 предыдущих журнала
rotate 4
# После ротации создавать новый пустой журнальный файл
create
# Сохранять старые журналы в сжатом виде [по умолчанию
# при помощи gzip, директива compresscmd позволяет указать
# другую программу для сжатия)
compress
# В каталог /etc/logrotate.d прикладные программы помещают
# инструкции по управлению их собственными журналами.
# Директива include <каталог> требует включить все файлы,
# содержащиеся в этом каталоге.
include /etc/logrotate.d
# Секция локальных параметров - инструкции для
# перечисленных в ней журналов
/var/log/wtmp /var/log/lastlog {
monthly
create 0664 root utmp
rotate 1
}
9.4. Выполнение заданий по расписанию
Пользователи ОС Windows привыкли к тому, что существует Мастер планирования заданий, позволяющий автоматически запускать приложения в заранее назначенное время. В UNIX-подобных ОС есть еще более мощный и гибкий диспетчер расписаний. Его удобно использовать для автоматизации обслуживания системы и выполнения других задач, не требующих взаимодействия с пользователем. Например, в нерабочее время можно автоматически выполнять резервное копирование данных или обновление системы через Интернет.
Создавать расписания и ставить задания в очередь на выполнение имеют право все, кому это явно не запрещено суперпользователем.
Сердцем системы периодического выполнения служат демоны atd и cron (в Red Hat-совместимых дистрибутивах он называется crond).
9.4.1. Запуск задания в назначенное время: команда at
Демон atd обслуживает задания, назначенные для однократного выполнения либо в установленное время, либо тогда, когда нагрузка на систему снизится до приемлемого уровня.
Для постановки задания в очередь для выполнения в указанное время служит команда at:
at [-f <файл>] ЧЧ:ММ
Файл — это исполняемый файл либо сценарий командного интерпретатора. Если он не указан, то вы должны будете вводить команды в командной строке, завершая ввод, как обычно, нажатием комбинации клавиш Ctrl+D.
Команда at допускает и более сложные спецификации времени, чем ЧЧ:ММ; вы можете указать дату или такое время, как midnight, noon или teatime. Подробности вы найдете на man-странице команды at.
Команда atq служит для просмотра очереди заданий. Для непривилегированного пользователя она выводит задания, поставленные в очередь им, а для суперпользователя — все задания. Удалить задание из очереди вы можете командой atrm.
Команда batch используется для тех заданий, которые заведомо потребуют много процессорного времени. Задание, поставленное в очередь при помощи этой команды, начинает выполняться только тогда, когда нагрузка на систему (среднее число процессов, ожидающих выделения им кванта времени) снизится до заранее установленного значения (по умолчанию 0.8; подробности — man atd).
Очередь заданий находится в каталоге /var/spool/at. Файлы /еtс/at.allow и /etc/at.deny содержат списки тех пользователей, которым разрешено и запрещено пользоваться системой at.
9.4.2. Диспетчер расписаний — демон cron
Этот демон запускается во время инициализации системы (сценарий /etc/init.d/crond), читает свои конфигурационные файлы и переходит в режим ожидания. Раз в минуту демон просыпается, проверяет дату последнего изменения конфигурационных файлов, перечитывает те из них, которые оказались изменены, и выполняет задания, назначенные на данную минуту.
В конфигурационных файлах, называемых еще crontab-файлами, хранятся расписания: в каталоге /var/spool/cron — по одному на зарегистрированного пользователя и /etc/crontab — суперпользовательский. Выполнив задание, демон cron отправляет почтовое сообщение о результатах выполнения владельцу crontab-файла или пользователю, указанному в переменной MAILTO этого файла.
Управление файлами расписанийПользовательские crontab-файлы не предназначены для ручного редактирования, Для управления ими служит команда crontab. Список тех, кому разрешено ее запускать, находится в файле /etc/cron.allow. Если этот файл отсутствует, то запускать crontab могут все, кроме тех, кто перечислен в файле /etc/cron.deny. Если отсутствуют оба файла, то запускать команду может только суперпользователь.
Формат команды:
crontab [-u <логин_имя> ] [ <файл> | [-l] | [-r] | [-е] | [-i]]
Если указан файл, то этим файлом замещается crontab-файл указанного пользователя; если нет, то crontab-файл редактируется на месте. Ключи означают следующее:
♦ -l — вывести на консоль содержимое файла расписания;
♦ -r — удалить файл расписания;
♦ -i — удалить, предварительно переспросив;
♦ -e — редактировать файл расписания, то есть открыть его в редакторе, указанном в переменной окружения $EDITOR (по умолчанию — vi).
Если не указаны ни файл, ни ключи, то crontab будет читать файл расписания со своего стандартного ввода. Закончив ввод строк, нажмите Ctrl+D.
Формат файла расписанияКаждая незакомментированная строка файла расписания имеет следующий формат:
минута час день месяц день_недели [логин_имя] команда
Поля спецификации времени могут содержать:
♦ символ *, соответствующий любому значению;
♦ число: 0–59 для минуты, 0–23 для часа, 1–31 для дня, 1–12 для месяца, 0–7 для дня недели (воскресенье — это и 0, и 7);
♦ диапазон чисел, разделенных дефисом: например, 1-5 в поле день_недели означает «с понедельника по пятницу»;
♦ числа или диапазоны, разделенные запятыми, действующими как ИЛИ.
Поля «день месяца» и «день недели» тоже объединяются как ИЛИ: задание будет выполнено в день, удовлетворяющий хотя бы одной из этих спецификаций.
Команда — это любая командная строка, допустимая правилами интерпретатора sh.
Например, следующая запись означает, что архивирование каталога /home/den будет производиться каждый день, кроме воскресенья, в семь часов утра: