Объекты SRC
Контроллер системных ресурсов (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 | |
| Показать | Yes | -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 при определении подсистемы и используется средством защиты системы, если оно настроено. Значение этого поля нельзя задать или изменить с помощью программы. |
Класс объектов типов субсервера
Если в подсистеме есть субсерверы, которым демон srcmstr будет отправлять команды уровня субсервера, то в данном классе должен быть соответствующий объект.
Этот класс объектов содержит три дескриптора, которые определены в структуре SRCsubsvr, хранящейся в файле srcobj.h:
| Описание | Определение |
|---|---|
| ИД субсервера (ключ) | Задает имя объекта типа субсервера. Набор имен для типов субсерверов совпадает с набором допустимых значений флага -t команд субсервера. Длина имени не должна превышать 30 байт, с учетом NULL-терминатора (29 однобайтовых символов или 14 многобайтовых символов). |
| Имя подсистемы-владельца | Задает имя подсистемы, которой принадлежит объект субсервера. В этом поле указывается ссылка на класс объектов подсистем SRC. |
| Кодовый знак | Задает десятичное число, идентифицирующее субсервер. Кодовый знак передается подсистеме, управляющей субсервером, в поле object структуры subreq, то есть структуры запроса SRC. Если в команде указано и имя объекта субсервера, демон srcmstr передает подсистеме кодовый знак в поле objname структуры subreq. См. "Пример структуры запроса SRC" в файле spc.h. |
В командах субсервер идентифицируется по типу необязательному имени экземпляра. С помощью типа субсервера демон SRC определяет подсистему, управляющую субсервером; имя субсервера не применяется.
Класс объектов уведомления
С помощью этого класса демон srcmstr может вызвать функции подсистемы для обработки ошибок в ее работе. Когда демон SRC получает сигнал SIGCHLD, означающий завершение процесса подсистемы, он проверяет состояние подсистемы (обслуживаемой демоном srcmstr) и определяет, связано ли завершение работы с вызовом команды stopsrc. Если команда stopsrc не выполнялась, завершение считается аварийным. Если в определении не задана опция перезапуска, либо попытка перезапуска не удалась, демон srcmstr пытается прочитать объект уведомления, связанный с данной подсистемой. Если такой объект задан, то выполняется метод, связанный с подсистемой.
Если объект подсистемы не найден в классе объектов уведомления, демон srcmstr проверяет, входит ли подсистема в группу. Если да, демон srcmstr пытается найти в классе объектов уведомления объект группы. Если такой объект есть, то вызывается связанный с ним метод. Таким образом, группа подсистем может применять общий метод.
Примечание: Метод уведомления подсистемы считается более приоритетным, чем метод уведомления группы. За счет этого в подсистеме, относящейся к группе одновременно запускаемых подсистем, может быть создан собственный метод восстановления и очистки.
Объекты уведомления содержат два дескриптора:
| Описание | Определение |
|---|---|
| Имя подсистемы или Имя группы | Задает имя подсистемы или группы, для которой определяется метод уведомления. |
| Метод уведомления | Задает путь к процедуре, которая должна выполняться демоном srcmstr при аварийном завершении работы системы или группы. |
Уведомление об аварийном завершении полезно в том случае, когда перед перезапуском подсистемы требуется выполнить специальные действия по восстановлению и очистке. Кроме того, это позволяет собирать информацию для последующего анализа причины аварийного завершения работы подсистемы.
Для создания объектов уведомления предназначена команда mknotify. Для изменения метода уведомления нужно удалить текущий объект уведомления с помощью команды rmnotify и создать новый объект.
| Команда | Определение |
|---|---|
| mknotify | Добавляет метод уведомления в базу данных конфигурации SRC |
| rmnotify | Удаляет метод уведомления из базы данных конфигурации SRC |
Демон srcmstr заносит в протокол информацию о действиях подсистемы по исправлению ошибок. Ответственность за отправку сообщений об ошибках ложится на саму подсистему.