SRC 对象

系统资源控制器 (SRC) 定义并管理三个对象类:

同时,这些对象类还代表 SRC 在其中执行其函数的域。 一组预定义的对象类描述符由 SRC 支持的子系统配置的可能集合组成。

注: 仅需要 SRC 子系统对象类。 子服务器类型和通知对象类的使用是系统相关的。

子系统对象类

子系统对象类包含所有 SRC 子系统的描述符。 必须在此类中配置子系统,SRC 才能识别该子系统。

子系统对象类的描述符在 /usr/include/sys/srcobj.h 文件的 SRCsubsys 结构中定义。 "子系统对象描述符和缺省值" 表提供了子系统描述符以及与每个描述符关联的 姆卡瑟斯奇斯系统公司 命令标志的短格式说明。

表 1. 子系统对象描述符和缺省值
Descriptors 默认值 标志
子系统名   -s
子系统命令路径   -p
命令参数   -a
执行优先级 20 -E
多个实例 -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
Auditid    

子系统对象描述符定义如下:

对象描述符 定义
子系统名 指定子系统对象的名称。 此名称不得超过 30 个字节,其中包括 null 终止符(对于单字节字符集为 29 个字符,而对于多字节字符集为 14 个字符)。 此描述符必须符合 POSIX。 此字段是必需的。
子系统命令路径 指定由子系统启动命令执行的程序的全路径名。 路径名不得超过 200 个 字节,其中包括 null 终止符(对于单字节字符集为 199 个字符,而对于多字节 字符集为 99 个字符)。 路径名必须符合 POSIX。 此字段是必需的。
命令参数 指定必须传送到启动子系统的命令的任何参数。 参数不得超过 200 个 字节,其中包括 null 终止符(对于单字节字符集为 199 个字符,而对于多字节 字符集为 99 个字符)。 这些参数由 srcmstr 守护程序根据 shell 使用的相同规则进行解析。 例如:引用字符串作为单独的参数传递,引用字符串外的空格是定界参数。
执行优先级 指定要运行的子系统的进程优先级。 由 srcmstr 守护程序启动的子系统运行此优先级。 缺省值为 20。
多个实例 指定一次可以运行的子系统实例数。 值 NO(-Q 标记)指定一次仅可运行一个子系统实例。 在该子系统已在运行时试图启动它的这一操作 将失败,试图在同一 IPC 消息队列密钥上启动某一子系统也将失败。 值 YES(-q 标记)指定多个子系统可使用同一 IPC 消息队列,并且同一子系统可有多个实例。 缺省值为 NO。
用户标识 指定在其下运行子系统的用户标识。 值 0 指示 root 用户。 此字段是必需的。
同义词名称 指定将要用作子系统备用名的字符串。 此字符串不得超过 30 个字节,其中包括 null 终止符(对于单字节字符集为 29 个字符,而对于多字节字符集为 14 个字符)。 这个字段是可选的。
启动操作 指定 srcmstr 守护程序是否在子系统异常终止 后重新启动它。 值 RESPAWN(-R 标记)指定 srcmstr 守护程序应该重新启动子系统。 值 ONCE( -O 标记)指定 srcmstr 守护程序不应该试图重新启动发生故障的系统。 在指定的等待时间内,对两次重新 启动有衍生限制。 如果不能成功地重新启动发生故障的子系统,请参考通知方法选项。 缺省值为 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 队列密钥 指定与 srcmstr 守护程序用来与子系统通信的 IPC 消息队列密钥相对应的十进制值。 对于使用 IPC 消息队列进行通信的子系 统,此字段是必需的。 使用带有标准路径名和标识参数的 ftok 子例程来确保此键是唯一的。 srcmstr 守护程序在启动子系统之前创建消息队列。
组名 指定子系统为组的成员。 此字段不得超过 30 个字节,其中包括 null 终止符(对于单字节字符集为 29 个字符,而对于多字节字符集为 14 个字符)。 这个字段是可选的。
子系统消息类型 指定置于子系统消息队列上的消息的 mtype。 子系统使用此值通过 msgrcvmsgxrcv 子例程检索消息。 如果正在使用消息队 列,那么需要此字段。
SIGNORM 信号值 指定发出正常停止请求时将要发送给子系统的值。 对于使用信号通信类型 的子系统,此字段是必需的。
SIGFORCE 信号值 指定发出强制停止请求时将要发送给子系统的值。 对于使用信号通信类型 的子系统,此字段是必需的。
显示值 指示是否可将不可操作的子系统的状态显示在 lssrc -alssrc -g 输出上。 -d 标记指示显示;-D 标记指示不 显示。 缺省值为 -d (显示)。
等待时间 指定在采取备用操作之前子系统完成重新启动或停止请求所需的时 间(以秒计)。 缺省值为 20 秒。
Auditid 指定子系统审计标识。 定义子系统时由 srcmstr 守护程序自动创建的,此字段为安全系统所用(如果配置)。 此字段无法被程序设置或更改。

子服务器类型对象类

如果子系统具有子服务器并且该子系统希望从 srcmstr 守护程序处接收到子服务器相关命令,那么必须在此类中配置对象。

此对象类包含三个描述符,这些描述符是在 srcobj.h 文件的 SRC堂 结构中定义的:

描述信息 定义
子服务器标识(密钥 指定子服务器类型对象标识的名称。 子服务器类型名称集定义了子服务器命令 -t 标记的允许值。 名称长度不得超过 30 个字节,其中包括 null 终止符(对于单字节字符集为 29 个字符,而对于多字节字符集为 14 个字符)。
所有子系统名称 指定拥有子服务器对象的子系统的名称。 将此字段作为链接定义给 SRC 子系统对象类。
代码点 (code point) 指定标识子服务器的十进制数字。 将代码点传递到控制子服务器的子系统。objectSRC 请求结构的 subreq 结构的字段。 如果在命令中还提供了子服务器对象名,那么 srcmstr 守护程序将代码点转发到objnamesubreq 结构的字段。 请参阅 spc.h 文件文档中的 "SRC 请求结构示例" 以获取这些元素的示例。

参考子服务器的命令将每个子服务器标识为子服务器的命名类型,并且还可将某一名称追加到子服务器类型的每个实例。 SRC 守护程序使用子服务器 类型确定子服务器的控制子系统,但不检查子服务器名称。

通知对象类

此类为 srcmstr 守护程序提供了 一个机制,使其在检测到子系统故障时调用子系统提供的例程。 当 SRC 守护程序接 收到指示子系统进程终止的 SIGCHLD 信号,它就检查子系 统(由 srcmstr 守护程序维护的)的状态以确定这一终止是否由 stopsrc 命令引发。 如果未发出 stopsrc 命令,那么此终止将被解释为异常终止。 如果定义中 的重新启动操作不指定重新衍生,或重新衍生尝试失败,那么 srcmstr 守护程序尝试着从通知对象类读取与子系统名称相关 的对象。 如果找到类似对象,那么运行与子系统相关联的方法。

如果没有在通知对象类中找到子系统对象,那么 srcmstr 守护程序就确定该子系统是否属于某一组。 如果 是,srcmstr 守护程序尝试着从通知对象类读取该组名的对象。 如果找到类似对象,那么调用与之相关的方法。 这样,子系统的组便可共享常用 方法。

注意:子系统通知方法优先于组通知方法。 因此,子 系统可属于一起启动的某一组,但仍然定义特定的恢复或清除例程。

通知对象由两个描述符定义:

描述信息 定义
子系统名称组名 指定为其定义通知方法的子系统或组的名称。
Notify Method 指定当 srcmstr 守护程序检测到子系统或组的异常终止时执行的例程的全路径名。

当特定恢复或清除工作需要在重新启动子系统之前被执 行时,此类通知很有用处。 它还可用于收集信息以确定子系统异常停止的原因。

使用 mknotify 命令创建通知对象。 要修改通知方法,必须使用 rmnotify 命令除去现有通知对象,然后创建新的通知对象。

命令 定义
mknotify 向 SRC 配置数据库添加通知方法
rmnotify 从 SRC 配置数据库除去通知方法

srcmstr 守护程序记录子系统恢复活动。 该子系统复杂报告子系统故障。