SRC 对象
系统资源控制器 (SRC) 定义并管理三个对象类:
同时,这些对象类还代表 SRC 在其中执行其函数的域。 一组预定义的对象类描述符由 SRC 支持的子系统配置的可能集合组成。
注: 仅需要 SRC 子系统对象类。 子服务器类型和通知对象类的使用是系统相关的。
子系统对象类
子系统对象类包含所有 SRC 子系统的描述符。 必须在此类中配置子系统,SRC 才能识别该子系统。
子系统对象类的描述符在 /usr/include/sys/srcobj.h 文件的 SRCsubsys 结构中定义。 "子系统对象描述符和缺省值" 表提供了子系统描述符以及与每个描述符关联的 姆卡瑟斯 和 奇斯系统公司 命令标志的短格式说明。
| 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。 子系统使用此值通过 msgrcv 或 msgxrcv 子例程检索消息。 如果正在使用消息队 列,那么需要此字段。 |
| SIGNORM 信号值 | 指定发出正常停止请求时将要发送给子系统的值。 对于使用信号通信类型 的子系统,此字段是必需的。 |
| SIGFORCE 信号值 | 指定发出强制停止请求时将要发送给子系统的值。 对于使用信号通信类型 的子系统,此字段是必需的。 |
| 显示值 | 指示是否可将不可操作的子系统的状态显示在 lssrc -a 或 lssrc -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 守护程序记录子系统恢复活动。 该子系统复杂报告子系统故障。