Вы находитесь на странице: 1из 11

Комп’ютерний практикум №3 (2.

2/3)

Протоколирование системных процессов


и запуск по расписанию

1. Утилита top.
1.1. Общие сведения.
В системах GNU/Linux программа top, является очень удобным системным
монитором, который позволяет понять причины нестабильной работы
операционной системы и обнаружить процессы, потребляющие большинство
системных ресурсов. Команда для запуска программы представлена ниже:
$ top

Давайте рассмотрим каждую строку вывода по очереди и определимся с


информацией на экране.

1 строка - общая информация (top)


 
Первая строка выводит данные по порядку:
 текущее время (11:37:19)
 время работы системы (up 1 day, 1:25)
 количество открытых пользовательских сессий (3 users)
 среднюю загрузку системы (load average: 0.02, 0.12, 0.07), три значения
соответствуют загрузке в последнюю минуту, пять минут и пятнадцать минут
соответственно.
2 строка - статистика процессов (task)
 
Вторая строка выводит следующие данные:
 общее количество процессов в системе (73 total)
 количество работающих в данный момент процессов (2 running)
 количество ожидающих событий процессов (71 sleeping)
 количество остановленных процессов (0 stopped)
 количество процессов, ожидающих родительский процесс для передачи
статуса завершения (0 zombie)
3 строка - статистика использования центрального процессора (cpu)
 
В третьей строке приводится информация об использовании центрального
процессора. Если вы просуммируете все значения, в результате у вас должно
получиться 100%. Давайте рассмотрим предназначение полей этой строки по
порядку:
 процент использования центрального процессора пользовательскими
процессам (0.3%us)
 процент использования центрального процессора системными процессами
(0.0%sy)
 процент использования центрального процессора процессами с
приоритетом, повышенным при помощи вызова nice (0.0%ni)
 процент времени, когда центральный процессор не используется (99,4%id)
 процент использования центрального процессора процессами,
ожидающими завершения операций ввода-вывода (0.0%wa)
 процент использования центрального процессора обработчиками
аппаратных прерываний (0.3%hi - Hardware IRQ (аппаратные прерывания))
 процент использования центрального процессора обработчиками
программных прерываний (0.0%si - Software Interrupts (программные
прерывания))
 количество ресурсов центрального процессора "заимствованных" у
виртуальной машины гипервизором для других задач (таких, как запуск другой
виртуальной машины); это значение будет равно нулю на настольных
компьютерах и серверах, не использующих виртуальные машины (0.0%st - Steal
Time (заимствованное время)).
4 и 5 строки - статистика использования памяти (memory usage)

 
В четвертой и пятой строке выводится информация об использовании физической
оперативной памяти и раздела подкачки соответственно. Значения в порядке
следования: общее количество памяти (2057720k total), количество используемой
памяти (778860k used), количество свободной памяти (1279160k free), количество
памяти в кэше буферов (31976k buffers). Статью, описывающую эти параметры в
подробностях, вы можете прочитать по ссылке.

Следующие строки - список процессов

 
Последним источником информации является список процессов,
отсортированный по степени использования центрального процессора (по
умолчанию). Давайте рассмотрим значения столбцов списка:
 PID - идентификатор процесса (4522)
 USER - имя пользователя, который является владельцем процесса (root)
 PR - приоритет процесса (15)
 NI - значение "NICE", влияющие на приоритет процесса (0)
 VIRT - объем виртуальной памяти, используемый процессом (132m)
 RES - объем физической памяти, используемый процессом (14m)
 SHR - объем разделяемой памяти процесса (3204)
 S - указывает на статус процесса: S=sleep (ожидает событий) R=running
(работает) Z=zombie (ожидает родительский процесс) (S)
 %CPU - процент использования центрального процессора данным
процессом (0.3)
 %MEM - процент использования оперативной памяти данным процессом
(0.7)
 TIME+ - общее время активности процесса (0:17.75)
 COMMAND - имя процесса (bb_monitor.pl)

1.2. Команды утилиты top.


Содержимое окна обновляется каждые 5 секунд. Список процессов может
быть отсортирован по используемому времени ЦПУ (по умолчанию), по
использованию памяти, по PID, по времени исполнения. Переключать режимы
отображения можно с помощью команд, которые программа top воспринимает.
Это следующие команды (просто нажимайте соответствующие клавиши, только
с учетом регистра, то есть вместе с клавишей Shift):
 <Shift>+<N> — сортировка по PID;
 <Shift>+<A> — сортировать процессы по возрасту;
 <Shift>+<P> — сортировать процессы по использованию ЦПУ;
 <Shift>+<M> — сортировать процессы по использованию памяти;
 <Shift>+<T> — сортировка по времени выполнения;
 q – выход.

Кроме команд, определяющих режим сортировки, команда top воспринимает


еще ряд команд, которые позволяют управлять процессами в интерактивном
режиме. С помощью команды <K> можно завершить некоторый процесс (его
PID будет запрошен), а с помощью команды <R> можно переопределить
значение nice для некоторого процесса. Таким образом, эти две команды
аналогичны командам kill и renice.

2. Протоколирование системы

2.1 Демон syslogd.


В любой UNIX-подобной системе есть стандартные файлы протоколов
(журналов). В них попадают сообщения, генерируемые ядром, системными
демонами, утилитами окружения. Эти файлы размещаются в каталоге /var/log.
Прикладные программы обычно помещают свои протоколы в подкаталоги этого
каталога, например, /var/log/httpd — журналы HTTP-сервера. Точное
расположение журнала прикладной программы зависит от ее настройки.
За ведение журналов отвечает система регистрации событий syslog. Она
позволяет сортировать сообщения по источникам и степени важности, а также
перенаправлять их в журнальные файлы, на консоль или на другой компьютер в
сети. Все подсистемы (демоны) и правильно написанные прикладные программы
не ведут протоколов самостоятельно, а посылают сообщения в систему
регистрации. Дальнейшая судьба этих сообщений зависит от политики
системного администратора.
Система регистрации состоит из следующих компонент;
— демон syslogd, принимающий сообщения от других процессов и
перенаправляющий их указанным адресатам;
— библиотечные функции openlog( ), syslog( ), closelog( ), посредством которых
процессы общаются с демоном syslogd.
Функция syslog( ) записывает протокольное сообщение в гнездо (сокет) /dev/log,
откуда его читает демон syslogd;
— команда logger, с помощью которой сообщение демону syslogd может передать
командный интерпретатор.
Демон syslogd запускается инициализационным сценарием в ходе начальной
загрузки системы и работает непрерывно. Убедиться в том, что он запущен,
можно с помощью команды:
$ ps -ef | grep syslogd | grep -v grep

(Последняя в этом конвейере команда нужна для того, чтобы


отфильтровать из вывода команды grep сведения о самой команде grep.)

Как и всякий демон, syslogd управляется конфигурационным файлом. По


умолчанию это файл /etc/syslog.conf, однако ничто не мешает назвать его как
угодно, а потом запускать syslogd с ключом -f /path/to/config.file. Об остальных
немногочисленных ключах можно узнать по команде man syslogd.
По сигналу HUP демон закрывает все журнальные файлы, перечитывает
конфигурационный файл и возобновляет процесс протоколирования. Чтобы
изменения в конфигурационном файле вступили в силу, нужно послать демону
syslogd сигнал HUP. Например, так:
$ kill -HUP `cat /var/run/syslogd.pid`

2.2. Конфигурационный файл /etc/syslog.conf


Это простой текстовый файл, каждая непустая и незакомментированная (знак
комментария – #) строка которого имеет следующий формат:
<селектор>[;<селектор>...] <действие>
Селектор представляет собой правило отбора сообщений, а действие — указание,
что с отобранными сообщениями дальше делать. Например, строка
user.* -/var/log/user.log
диктует перенаправление сообщений от пользовательских программ в
файл /var/log/user.log.
Действиями могут быть:
— /абсолютное/имя/файла — записать сообщение в файл. Префикс «-» перед
именем файла запрещает синхронизировать файл после каждой записи. По
умолчанию syslogd после записи каждой строки выполняет вызов fsync(). Это
делается ради сохранности журналов, но при интенсивной записи может отнять
половину процессорного времени. Поэтому следует отключать синхронизацию
протоколов, в которые пишется много сообщений — например, отладочных.
— @имя_машины — переслать сообщение демону syslogd, работающему на
указанной машине. Имя должно быть известно DNS или прописано в /etc/hosts, –
в противном случае следует писать @IР-адрес.
— /dev/console — вывести сообщение на консоль.
— * — вывести сообщение на экраны всех работающих в данный момент
пользователей.
Несколько селекторов, отбирающих сообщения разной категории, можно
группировать, разделяя точкой с запятой, для того, чтобы над ними было
выполнено одно и то же действие. Действия группировать нельзя. Чтобы
направить одни и те же сообщения и в файл, и на удаленный компьютер, нужно
вписать в конфигурационный файл две строки с одинаковыми селекторами.
Селектор, в свою очередь, имеет формат:
<средство> [, средство2...] . <уровень_серьезности>
Средство (facility) — это категория программы, пославшей сообщение.
Категория выбирается из списка ключевых слов, приведенного в таблице 9.2.

Уровень серьезности (priority) определяет важность сообщения. Программы


регистрируют любые сообщения — от отладочной информации до требований
экстренного вмешательства — а демон syslogd игнорирует те из них, важность
которых ниже, чем указано в конфигурационном файле. Уровень серьезности
указывается ключевым словом, список которых в порядке возрастания важности
приведен в таблице 9.3. Допускаются также ключевые слова * (все сообщения) и
none (никаких сообщений).
В Red Hat-совместимых системах можно ставить перед уровнем серьезности
дополнительные модификаторы «=» (регистрировать сообщения только
указанного уровня) и «!» (игнорировать сообщения указанного и более высоких
уровней). Можно также направлять сообщения не только в обычный файл, но и в
именованный канал, поставив перед ним символ «|».
2.3. Протоколирование ядра. Демон klogd и команда dmesg
Демон klogd предназначен для перехвата и протоколирования сообщений
ядра Linux. Ядро, в отличие от пользовательского процесса, не может выводить
сообщения, пользуясь стандартной функцией syslog(): библиотека, содержащая
эту функцию, доступна только обычным приложениям. В ядре есть свои средства
вывода сообщений, приложениям недоступные. Обработку этих сообщений и
организует демон klogd. Обычно эта обработка состоит в пересылке сообщений
демону syslogd, хотя klogd может работать и самостоятельно.
Демон syslogd направляет сообщения ядра вперемешку с сообщениями от
других источников в общий журнальный файл (обычно /var/log/messages,
смотри /etc/syslog.conf), но ядро поддерживает и собственный кольцевой буфер
сообщений. Для просмотра текущего состояния этого буфера предназначена
команда dmesg. Ее вывод рекомендуется пропускать через фильтр more или less.
Анализ сообщений ядра может потребоваться для того, чтобы узнать,
поддерживает ли ваше ядро то или иное устройство или функцию. Например,
чтобы узнать, включена ли поддержка квотирования, выполните команду
$ dmesg | grep -i quot
Сообщения, которые ядро генерирует и сохраняет в буфере во время загрузки
системы, направляются также в файл /var/log/dmesg. По окончании загрузки этот
файл закрывается и его содержимое становится доступно для просмотра и
анализа.

2.4. Управление журналами. Утилита logrotate .


Файлы журналов для различных служб находятся в каталоге /var/log/.
Журнальные файлы разрастаются быстро, и рано или поздно с ними приходится
что-то делать: сжимать, архивировать или просто удалять. Как следует из
названия утилиты logrotate, ее основное занятие — это ротация журнальных
файлов. Ротация — это последовательное переименование предыдущих версий
журналов (maillog.2 в maillog.3, maillog.1 в maillog.2 , maillog в maillog. 1) и
создание нового пустого журнального файла (maillog) для записи последующих
сообщений. Ротация производится либо по истечении указанного времени, либо
по превышении журнальным файлом указанного размера.
Список журналов, подлежащих обработке утилитой logrotate, и инструкции
по обработке определяются конфигурационными файлами, имена которых в
любом количестве передаются как аргументы при вызове утилиты (см. man
logrotate). Директивы последующих конфигурационных файлов перекрывают
директивы предыдущих, так что порядок имеет значение. Традиционно
используется один файл /etc/logrotate.conf, а инструкции для дополнительных
журналов включаются в него при помощи директивы include.

3. Выполнение заданий по расписанию

Пользователи ОС Windows привыкли к тому, что существует Мастер


планирования заданий, позволяющий автоматически запускать приложения в
заранее назначенное время. В UNIX-подобных ОС есть еще более мощный и
гибкий диспетчер расписаний. Его удобно использовать для автоматизации
обслуживания системы и выполнения других задач, не требующих
взаимодействия с пользователем. Например, в нерабочее время можно
автоматически выполнять резервное копирование данных или обновление
системы через Интернет.
Создавать расписания и ставить задания в очередь на выполнение имеют
право все, кому это явно не запрещено суперпользователем. Сердцем системы
периодического выполнения служат демоны atd и сrоnd.

3.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.
3.2. Диспетчер расписаний — демон сron.
Этот демон запускается во время инициализации системы
(сценарий /usr/sbin/crond), читает свои конфигурационные файлы и переходит в
режим ожидания. Раз в минуту демон просыпается, проверяет дату последнего
изменения конфигурационных файлов, перечитывает те из них, которые
оказались изменены, и выполняет задания, назначенные на данную минуту.
В конфигурационных файлах, называемых еще cronlab-файлами, хранятся
расписания: в каталоге /var/spool/cron/crontabs/ — по одному на
зарегистрированного пользователя и суперпользовательский — root. Выполнив
задание, демон сron отправляет почтовое сообщение о результатах выполнения
владельцу crontab-файла или пользователю, указанному в переменной MAILTO
этого файла.

Управление файлами расписаний


Для управления ими служит команда crontab. Список тех, кому разрешено ее
запускать, находится в файле /etc/cron.allow. Если этот файл отсутствует, то
запускать crontab могут все, кроме тех, кто перечислен в файле /etc/cron.deny.
Если отсутствуют оба файла, то запускать команду может только
суперпользователь.
Формат команды:
crontab [-u <логин_имя> ] [ <файл> I [-1] I [-r] I f-e] I [-i]]
Если указан файл, то этим файлом замещается crontab-файл указанного
пользователя; если нет, то crontab-файл редактируется на месте. Ключи означают
следующее:
¦ -l — вывести на консоль содержимое файла расписания;
¦ -r — удалить файл расписания;
¦ -i — удалить, предварительно переспросив.
Файл расписания можно редактировать и с помощью обычного файлового
менеджера. В конце файла обязательно оставьте пустую строку. После
внесения изменений необходимо перезапустить демон crond командой
/usr/sbin/crond restart или перезагрузить машину.

Формат файла расписания


Каждая незакомментированная строка файла расписания имеет следующий
формат:
минута час день месяц день_недели [логин_имя] команда
Поля спецификации времени могут содержать:
¦ символ *, соответствующий любому значению; (например последовательность
* * * * * – означает, что сценарий будет выполняться каждую минуту);
¦ число: 0-59 для минуты, 0-23 для часа, 1-31 для дня, 1-12 для месяца, 0-7 для дня
недели (воскресенье — это и 0, и 7);
¦ диапазон чисел, разделенных дефисом: например, 1-5 в поле день_недели
означает «с понедельника по пятницу»;
¦ числа или диапазоны, разделенные запятыми, действующими как ИЛИ.
Поля «день месяца» и «день недели» тоже объединяются как ИЛИ: задание
будет выполнено в день, удовлетворяющий хотя бы одной из этих спецификаций.
Команда — это любая командная строка, допустимая правилами
интерпретатора sh. Например, следующая запись означает, что архивирование
каталога /home/den будет производиться каждый день, кроме воскресенья, в семь
часов утра:

0 7 * * 1-6 tar cfz /backup/home.den.gz /home/den


В дистрибутивы Linux обычно входит готовый системный файл расписаний
/var/spool/crontabs/root и сценарии для выполнения стандартных задач по
обслуживанию системы (ротации журналов, ведения базы установленных пакетов
программ и т.п.), размещенные в каталогах /etc/cron.hourly, /etc/cron.daily,
/etc/cron.weekly и/etc/cron.monthly. Директива /usr/bin/run-parts в файле
/var/spool/cron/crontabs/root указывает, что следует выполнить все исполняемые
файлы из указанного каталога.

ЗАДАНИЕ
на компьютерный практикум

1. Работа с утилитой top.

1) Изучите порядок работы с утилитой top (п.1.1).


2) Запустите улиту. Изучите работу команд (п.1.2.).
3) Создайте в домашнем каталоге обычного пользователя командный файл с
названием loop. Он должен содержать три оператора, создающих
бесконечный цикл: while true; do true; done. Задайте для всех ролей этого
файла право на выполнение. Запустите процесс loop в фоновом режиме:
./loop &
Запустите улиту top. Выпишите в конспект всю возможную информацию
об этом процессе. Остановите выполнение loop командой <K>.
4) Проверьте остановку loop командой ps -f.

2. Протоколирование системы.
1) Изучите файлы протоколирования системы (п.2.1).
2) Проверьте наличие демона syslogd.
3) Изучите структуру конфигурационного файла /etc/syslog.conf (п.2.2).
4)Изучите содержание файла /var/log/messages. Перезагрузите операционную
систему.
5) Запишите в конспект следующую информацию о системе из файла
/var/log/messages:
– объём кеш-памяти уровня L2;
– имя файла устройства для работы с CD-ROM;
– количество секторов на диске HDD.
(используйте поисковую функцию файлового менеджера, зафиксируйте
номера строк для показа этой информации в файле).
6) С помощью конвеера команд dmesg и grep выведите на экран информацию
о usb-устройствах в системе (п.2.3).

3. Запуск задания в назначенное время.


1) Изучите порядок запуска процессов по расписанию (п.3.1).
2) Создайте исполняемый файл-сценарий в отдельном каталоге пользователя
(/home/Ivanov/KP_2_3/primer_1). Сценарий должен выводить надпись
"Work time" на третью консоль dev/tty3: echo "Work time" > /dev/tty3 –
такая строка должна быть в файле. Не забудьте задать права на
выполнение. Проверьте работу сценария командой ./primer_1
3) С помощью команды at поставить сценарий primer_1 в очередь заданий на
выполнение.
4) Проверить наличие его в очереди. Показать результат работы команды at.

4. Запуск задания с помощью диспетчера расписаний.


1) Изучите работу диспетчера расписаний (п.3.2).
2) Создайте исполняемый файл-сценарий в отдельном каталоге пользователя
(/home/Ivanov/KP_2_3/CRON/primer_2). Сценарий должен выводить надпись
"Rabotaet_primer_2" на четвёртую консоль (/dev/tty4).
3) Откройте файл расписания суперпользователя /var/spool/cron/crontabs/root.
Введите в этот файл строку (в конце файла), которая предусматривает
выполнение сценария primer_2 каждую минуту (используйте директиву
/usr/bin/run-parts ). Продемонстрируйте выполнение задачи.
4) Введите в файл расписания суперпользователя строку, которая выводит
ежеминутно на пятую консоль надпись Rabotaet_cron. Продемонстрируйте
выполнение задачи.

Контрольні питання:
1. Дати декілька визначень процесу.
2. Які ресурси потрібні для виконання програми.
3. Дати визначення потоку.
4. Різниця між фоновим та активним процесами.
5. Склад елементів потоку.
6. Склад елементів процесу.
7. Атрибути процесу.