Контроллер системных ресурсов (SRC) работает с тремя классами объектов:
Все функции SRC предназначены для работы с объектами этих классов. Предопределенный набор дескрипторов классов объектов определяет возможный набор конфигураций подсистемы, поддерживаемых SRC.
Примечание: Для работы SRC требуется только класс объектов подсистем. Классы объектов типа субсервера и объектов уведомления необходимы только в некоторых системах.
Класс объектов подсистем содержит дескрипторы всех подсистем SRC. Для того чтобы SRC смог работать с подсистемой, ее нужно определить в этом классе.
Дескрипторы класса объектов
подсистем определены в структуре SRCsubsys,
хранящейся в файле /usr/include/sys/srcobj.h.
Краткое описание дескрипторов подсистем и связанных с ними флагов команд mkssys и chssys
приведено в таблице Дескрипторы объектов подсистем и значения по
умолчанию.
Дескрипторы объектов подсистем и значения по умолчанию | ||
Дескрипторы | Значения по умолчанию | Флаги |
Имя подсистемы |
| -s |
Имя команды подсистемы |
| -p |
Аргументы команды |
| -a |
Приоритет выполнения | 20 | -E |
Несколько экземпляров | NO | -Q -q |
ИД пользователя |
| -u |
Синоним (ключ) |
| -t |
Запуск | ONCE | -O -R |
stdin | /dev/console | -i |
stdout | /dev/console | -o |
stderr | /dev/console | -e |
Способ обмена данными | Сокеты | -K -I -S |
Тип сообщений подсистемы |
| -m |
Ключ очереди IPC для обмена данными |
| -l |
Имя группы |
| -G |
Сигнал SIGNORM |
| -n |
Сигнал SIGFORCE |
| -f |
Показать | Да | -D -d |
Время ожидания | 20 секунд | -w |
ИД контроля |
|
|
Дескрипторы объектов подсистем
определяются следующим образом:
Имя подсистемы | Задает имя объекта подсистемы. Размер имени не должен превышать 30 байт, с учетом NULL-терминатора (29 однобайтовых символов или 14 многобайтовых символов). Этот дескриптор должен быть задан в соответствии со стандартом POSIX. Это обязательное поле. |
Имя команды подсистемы | Задает полное имя программы, выполняемой командой запуска подсистемы. Размер полного имени не должен превышать 200 байт (199 однобайтовых символов или 99 многобайтовых символов). Имя должно быть задано в соответствии со стандартом POSIX. Это обязательное поле. |
Аргументы команды | Задает аргументы команды запуска подсистемы. Размер аргументов не должен превышать 200 байт, с учетом NULL-терминатора (199 однобайтовых символов или 99 многобайтовых символов). Список аргументов анализируется демоном srcmstr по тем же правилам, которые применяются оболочками. Например, строки, заключенные в кавычки, передаются как строковый аргумент, а пробелы между строками считаются разделителями аргументов. |
Приоритет выполнения | Задает приоритет, с которым будет выполняться процесс подсистемы. Этот приоритет назначается всем подсистемам, запущенным с помощью демона srcmstr. Значение по умолчанию - 20. |
Несколько экземпляров | Задает число экземпляров подсистемы, которые могут выполняться одновременно. Значение Нет (флаг -Q ) указывает, что в каждый момент времени может выполняться только один экземпляр подсистемы. В этом случае запрос на запуск еще одного экземпляра подсистемы или подсистемы с тем же ключом очереди сообщений IPC не будет выполнен. Значение Да (флаг -q) указывает, что с одной и той же очередью сообщений IPC могут работать несколько подсистем, и одновременно может выполняться несколько экземпляров подсистемы. Значение по умолчанию - Нет. |
ИД пользователя | Задает ИД пользователя (в численном виде), у которого есть права на запуск подсистемы. Значение 0 соответствует пользователю root. |
Синоним | Задает символьную строку, которая будет применяться в качестве альтернативного имени подсистемы. Размер символьной строки не должен превышать 30 байт, с учетом NULL-терминатора (29 однобайтовых символов или 14 многобайтовых символов). Это необязательное поле. |
Запуск | Указывает, должен ли демон srcmstr перезапускать подсистему после аварийного завершения работы. Значение RESPAWN (флаг -R) указывает, что демон srcmstr должен перезапускать подсистему. Значение ONCE (флаг -O) указывает, что демон srcmstr не должен перезапускать систему, в которой произошел сбой. Если указано значение RESPAWN, то система будет перезапускаться максимум два раза в течение указанного периода ожидания. Если подсистему, в которой произошел сбой, не удалось запустить снова, то запускается метод уведомления. Значение по умолчанию - ONCE. |
Стандартный файл/устройство ввода | Задает файл или устройство, из которого система получает ввод. Значение по умолчанию - /dev/console. Размер этого поля не должен превышать 200 байт, с учетом NULL-терминатора (199 однобайтовых символов или 99 многобайтовых символов). Если в качестве способа обмена данными выбраны сокеты, то значение этого поля игнорируется. |
Стандартный файл/устройство вывода | Задает файл или устройство, на которое система отправляет вывод. Размер этого поля не должен превышать 200 байт, с учетом NULL-терминатора (199 однобайтовых символов или 99 многобайтовых символов). Значение по умолчанию - /dev/console. |
Стандартный файл/устройство ошибок | Задает файл или устройство, на которое система будет отправлять сообщения
об ошибках. Размер этого поля не должен превышать 200 байт, с учетом
NULL-терминатора (199 однобайтовых символов или 99 многобайтовых
символов). Все ошибки должны обрабатываться методом уведомления.
Значение по умолчанию - /dev/console.
Примечание: Информация о серьезных ошибках записывается в протокол ошибок. |
Способ обмена данными | Задает способ обмена данными между демоном srcmstr и подсистемой. Можно выбрать один из трех способов: IPC (-I), сокеты (-K) или сигналы (-S). Значение по умолчанию - сокеты. |
Ключ очереди IPC для обмена данными | Задает десятичное значение, соответствующее ключу очереди IPC. Это значение демон srcmstr применяет для обмена данными с подсистемой. Это поле применяется только подсистемами, для которых в качестве способа обмена данными выбрана очередь IPC. Для того чтобы создать уникальный ключ, воспользуйтесь функцией ftok, указав полное имя и ИД. Демон srcmstr создает очередь сообщений перед запуском подсистемы. |
Имя группы | Задает имя группы подсистемы. Размер этого поля не должен превышать 30 байт (29 однобайтовых символов или 14 многобайтовых символов). Это необязательное поле. |
Тип сообщений подсистемы | Задает тип сообщений, которые будут отправляться в очередь сообщений подсистемы. Подсистема применяет это значение при получении сообщений с помощью функции msgrcv или msgxrcv. Это поле является обязательным, если в качестве способа обмена данными выбрана очередь сообщений. |
Сигнал SIGNORM | Задает значение, которое должно быть передано подсистеме при отправке запроса на обычное завершение. Это значение применяется только системами, которые в качестве способа обмена данными используют сигналы. |
Сигнал SIGFORCE | Задает значение, которое должно передаваться подсистеме при отправке запроса на принудительное завершение. Это значение применяется только системами, которые в качестве способа обмена данными используют сигналы. |
Показывать значение | Указывает, должно ли в выводе команды lssrc -a и lssrc -g указываться состояние неработающей подсистемы. Если оно должно быть показано, то укажите флаг -d, если нет - флаг -D. Значение по умолчанию - -d (показывать). |
Время ожидания | Задает интервал времени в секундах, в течение которого подсистема должна запуститься или завершить работу перед тем, как будет выполнено альтернативное действие. Значение по умолчанию - 20 секунд. |
ИД контроля | Задает ИД контроля для подсистемы. ИД создается автоматически демоном srcmstr при определении подсистемы и используется средством защиты системы, если оно настроено. Значение этого поля нельзя задать или изменить с помощью программы. |
Информация об определении и изменении объектов подсистем приведена в разделе Определение подсистемы в SRC.
Если в подсистеме есть субсерверы, которым демон srcmstr будет отправлять команды уровня субсервера, то в данном классе должен быть соответствующий объект.
Этот класс объектов содержит три
дескриптора, которые определены в структуре SRCsubsvr, хранящейся в файле
srcobj.h:
ИД субсервера (ключ) | Задает имя объекта типа субсервера. Набор имен для типов субсерверов совпадает с набором допустимых значений флага -t команд субсервера. Длина имени не должна превышать 30 байт, с учетом NULL-терминатора (29 однобайтовых символов или 14 многобайтовых символов). |
Имя подсистемы-владельца | Задает имя подсистемы, которой принадлежит объект субсервера. В этом поле указывается ссылка на класс объектов подсистем SRC. |
Кодовый знак | Задает десятичное число, идентифицирующее субсервер. Кодовый знак передается подсистеме, управляющей субсервером, в поле object структуры subreq, то есть структуры запроса SRC. Если в команде указано и имя объекта субсервера, демон srcmstr передает подсистеме кодовый знак в поле objname структуры subreq. См. "Пример структуры запроса SRC" в файле spc.h. |
В командах субсервер идентифицируется по типу необязательному имени экземпляра. С помощью типа субсервера демон SRC определяет подсистему, управляющую субсервером; имя субсервера не применяется.
Информация об определении и изменении объектов типа субсервера приведена в разделе Определение подсистемы в SRC.
С помощью этого класса демон srcmstr вызывает процедуры подсистемы для обработки ошибок в ее работе. Когда демон SRC получает сигнал SIGCHLD, означающий завершение процесса подсистемы, он проверяет состояние подсистемы (обслуживаемой демоном srcmstr) и определяет, вызвано ли завершение командой stopsrc. Если команда stopsrc не выполнялась, завершение считается аварийным. Если в определении не задана опция перезапуска, либо попытка перезапуска не удалась, демон srcmstr пытается прочитать объект уведомления, связанный с данной подсистемой. Если такой объект задан, то выполняется метод, связанный с подсистемой.
Если объект подсистемы не найден в классе объектов уведомления, демон srcmstr проверяет, входит ли подсистема в группу. Если да, демон srcmstr пытается найти в классе объектов уведомления объект группы. Если такой объект есть, то вызывается связанный с ним метод. Таким образом, группа подсистем может применять общий метод.
Примечание: Метод уведомления подсистемы считается более приоритетным, чем метод уведомления группы. За счет этого в подсистеме, относящейся к группе одновременно запускаемых подсистем, может быть создан собственный метод восстановления и очистки.
Объекты уведомления содержат два
дескриптора:
Уведомление об аварийном завершении полезно в том случае, когда перед перезапуском подсистемы требуется выполнить специальные действия по восстановлению и очистке. Кроме того, это позволяет собирать информацию для последующего анализа причины аварийного завершения работы подсистемы.
Для создания объектов уведомления
предназначена команда mknotify. Для
изменения метода уведомления нужно удалить текущий объект уведомления с
помощью команды rmnotify и создать новый
объект.
mknotify | Добавляет метод уведомления в базу данных конфигурации SRC |
rmnotify | Удаляет метод уведомления из базы данных конфигурации SRC |
Демон srcmstr заносит в протокол информацию о действиях подсистемы по исправлению ошибок. Ответственность за отправку сообщений об ошибках ложится на саму подсистему.
Глава 26, Контроллер системных ресурсов
Команды mkssys, mkserver, mknotify, rmnotify