命令基本语法指命令行中输入指令的规范结构,包括命令名、选项、参数等元素及其排列顺序和书写规则。
STRSTS (Start Subsystem) 命令是 IBM i (AS/400, iSeries) 操作系统中的核心管理命令,用于启动一个已定义但未处于活动状态的子系统,子系统是 IBM i 上运行工作(作业)的环境,负责管理资源(如内存池、作业队列)和作业的生命周期,理解并正确使用 STRSTS
对于系统管理员至关重要。
STRSTS SBSD(library-name/subsystem-name) [OPTIONAL PARAMETERS]
SBSD
(Subsystem Description – 子系统描述): 这是必需参数,它指定要启动的子系统描述对象的名称及其所在的库。library-name
: 包含子系统描述对象的库名(QGPL
,MYLIB
),如果省略库名,系统默认在*LIBL
(库列表)中查找。subsystem-name
: 要启动的子系统描述对象的名称(QBATCH
,QINTER
,QCMN
,MYSUBSYS
)。
常用可选参数详解
-
SUBSYSTEM(active-subsystem-name)
- 作用: 为正在启动的子系统指定一个活动子系统名称,这个名称是系统内部识别该子系统实例的标识符。
- 使用场景:
- 当同一个子系统描述 (
SBSD
) 需要启动多个独立实例时(启动多个批处理子系统处理不同队列的作业),每个实例必须有一个唯一的SUBSYSTEM
名称。 - 如果省略此参数,系统默认使用子系统描述对象本身的名称 (
subsystem-name
) 作为活动子系统名称,该描述只能启动一个实例。
- 当同一个子系统描述 (
- 示例:
STRSTS SBSD(MYAPP/MYBATCH) SUBSYSTEM(MYBATCH01)
启动MYBATCH
描述的一个实例,活动名称为MYBATCH01
。
-
JOBQ(library-name/job-queue-name)
- 作用: 指定一个作业队列,该子系统启动后将从该队列中选取作业来运行。
- 使用场景:
- 覆盖子系统描述 (
SBSD
) 中定义的默认作业队列。 - 动态地将子系统指向不同的作业队列进行处理。
- 覆盖子系统描述 (
- 示例:
STRSTS SBSD(QGPL/QBATCH) JOBQ(MYAPP/MYJOBQ)
启动标准的QBATCH
子系统,但它将从MYAPP/MYJOBQ
作业队列中获取作业,而不是其定义中指定的队列。
-
JOBQNBR(entry-number)
- 作用: 指定子系统在启动时初始检查的作业队列条目号。
- 说明: 子系统描述中定义了多个作业队列条目 (
JOBQENTRY
),此参数告诉子系统从哪个条目号开始处理作业队列,通常用于调试或特定调度场景。 - 示例:
STRSTS SBSD(MYAPP/MYSUBSYS) JOBQNBR(3)
启动MYSUBSYS
并从其定义的作业队列列表中的第 3 个条目开始处理。
-
WAIT(*YES | *NO)
- 作用: 控制发出
STRSTS
命令的作业是否等待子系统完全启动成功后才继续执行。 - 值说明:
*YES
: 命令作业等待,直到子系统成功启动(状态变为*ACTIVE
)或启动失败(状态变为*INOPERABLE
)才返回控制权,这是推荐值,尤其在脚本或批处理作业中启动关键子系统时,确保后续操作依赖的子系统已就绪。*NO
: 命令作业立即返回控制权,不等待子系统启动结果,启动过程在后台进行,适用于非关键或启动时间较长的子系统。
- 示例:
STRSTS SBSD(QGPL/QINTER) WAIT(*YES)
启动交互式子系统并等待其完全启动。
- 作用: 控制发出
-
SYNCHRONIZE(*YES | *NO)
- 作用: 控制子系统启动时是否同步其关联的资源(如内存池、作业队列)。
- 值说明:
*YES
: 子系统启动前,系统会尝试确保所有在子系统描述中定义的、需要启动的资源(如*MEMPOOL
,*JOBQ
)都已处于活动状态,如果某个资源未启动,系统会尝试自动启动它,这有助于确保子系统启动后能立即正常工作。*NO
: 子系统启动时不检查或启动其关联的资源,如果资源未启动,子系统可能启动失败或启动后无法正常工作(无法从作业队列获取作业)。
- 推荐: 通常建议使用
*YES
以确保环境一致性,这是默认值。 - 示例:
STRSTS SBSD(MYAPP/MYSUBSYS) SYNCHRONIZE(*YES)
(默认行为,可省略)。
关键使用场景与示例
-
启动标准子系统:
- 启动批处理子系统:
STRSTS SBSD(QGPL/QBATCH)
- 启动交互式子系统:
STRSTS SBSD(QGPL/QINTER)
- 启动通信子系统:
STRSTS SBSD(QGPL/QCMN)
- 启动批处理子系统:
-
启动自定义子系统:
STRSTS SBSD(MYAPP/MYSUBSYS)
启动库MYAPP
中定义的名为MYSUBSYS
的自定义子系统。
-
启动子系统并指定作业队列:
STRSTS SBSD(QGPL/QBATCH) JOBQ(MYAPP/HIGH_PRIORITY_JOBQ)
启动QBATCH
,但让它处理MYAPP/HIGH_PRIORITY_JOBQ
队列中的作业。
-
启动子系统的多个实例:
STRSTS SBSD(MYAPP/MYBATCH) SUBSYSTEM(BATCH_INSTANCE1) JOBQ(MYAPP/JOBQ1)
STRSTS SBSD(MYAPP/MYBATCH) SUBSYSTEM(BATCH_INSTANCE2) JOBQ(MYAPP/JOBQ2)
- 使用相同的子系统描述
MYBATCH
,启动了两个独立的实例BATCH_INSTANCE1
和BATCH_INSTANCE2
,分别处理JOBQ1
和JOBQ2
中的作业。
-
在脚本/批处理作业中安全启动(等待完成):
STRSTS SBSD(QGPL/QINTER) WAIT(*YES)
确保交互式子系统完全启动后,脚本才继续执行后续命令。
验证子系统状态
启动后,使用以下命令检查子系统状态:
WRKACTJOB
(Work with Active Jobs): 在“子系统”过滤条件中输入活动子系统名称(SUBSYSTEM
参数值或默认的SBSD
名),查看其状态和管理的作业,状态应为ACTIVE
。- *`DSPSBSD SBSD(library-name/subsystem-name) DETAIL(SBS)
:** 显示子系统描述的详细信息,包括其当前活动实例的状态 (
Status` 字段)。 WRKSBS
(Work with Subsystems): 查看所有已定义的子系统及其当前状态 (Status
列),成功启动的子系统状态为ACTIVE
。
重要注意事项与最佳实践 (E-A-T 重点)
- 权限要求: 执行
STRSTS
命令通常需要*JOBCTL
(作业控制) 特殊权限或具有足够权限的用户配置文件(如QSECOFR
)。 - 子系统描述 (
SBSD
) 必须存在: 在启动之前,必须使用CRTSBSD
(Create Subsystem Description) 命令创建好相应的子系统描述对象。 - 资源依赖性: 子系统依赖其描述中定义的资源(内存池、作业队列、类等),使用
SYNCHRONIZE(*YES)
(默认) 可最大程度确保这些资源在子系统启动前可用,检查作业日志 (DSPJOBLOG
) 是诊断启动失败(状态*INOPERABLE
)的关键。 - 唯一活动名 (
SUBSYSTEM
): 当需要启动多个实例时,SUBSYSTEM
参数指定的活动名称必须唯一,重复使用会导致启动失败。 - *`WAIT(YES)
的可靠性:** 在自动化脚本中**强烈建议**使用
WAIT(*YES),以避免在子系统未就绪时就执行依赖它的操作,检查命令的完成消息(
CPF消息表示失败,
CPI` 消息表示成功)是良好实践。 - 停止子系统: 使用
ENDSBS
(End Subsystem) 命令停止一个活动的子系统,指定*IMMED
选项会强制结束其管理的所有作业(慎用!),*CNTRLD
选项允许作业正常结束。 - 生产环境谨慎操作: 启动/停止关键子系统(如
QINTER
,QCMN
)会影响用户连接和系统通信,务必在计划维护窗口或确认影响范围后进行,并通知相关用户。 - 文档化: 对于自定义子系统的启动命令和参数,应在操作手册或配置管理数据库 (CMDB) 中清晰记录。
常见错误消息
CPF2105
: Subsystem &1 in library &2 not active.- 原因/解决: 尝试启动的子系统描述 (
SBSD
) 不存在,检查库名和子系统名拼写是否正确。
- 原因/解决: 尝试启动的子系统描述 (
CPF2110
: Subsystem &1 already active.- 原因/解决: 尝试启动的子系统描述 (
SBSD
) 已经有一个活动实例(且未使用SUBSYSTEM
指定不同的活动名),使用WRKSBS
或WRKACTJOB SBS(SUBSYS_NAME)
确认状态,如果需要另一个实例,必须使用唯一的SUBSYSTEM
参数。
- 原因/解决: 尝试启动的子系统描述 (
CPF2113
: Subsystem &1 not started. Resource &2 &3 &4 not active.- 原因/解决: 子系统依赖的资源(如内存池
*MEMPOOL
或作业队列*JOBQ
)未启动,检查消息中指定的资源类型和名称,使用STRSBS
启动该资源(或确保其已启动),然后重试STRSTS
,确保SYNCHRONIZE(*YES)
被使用。
- 原因/解决: 子系统依赖的资源(如内存池
CPF2182
: Not authorized to subsystem description &1 in &2.- 原因/解决: 当前用户对指定的子系统描述 (
SBSD
) 对象缺乏*USE
权限,联系系统管理员获取权限。
- 原因/解决: 当前用户对指定的子系统描述 (
CPF3C90
: Error occurred during processing of command.`- 原因/解决: 更通用的错误,检查作业日志 (
DSPJOBLOG
) 获取更具体的根本原因消息 (CPF
,MCH
,RNX
等)。
- 原因/解决: 更通用的错误,检查作业日志 (
STRSTS
命令是管理 IBM i 工作负载环境的核心工具,掌握其语法、参数(特别是 SBSD
, SUBSYSTEM
, JOBQ
, WAIT
)和最佳实践,对于系统管理员高效、安全地配置和运行批处理、交互式及自定义子系统至关重要,始终优先考虑使用 WAIT(*YES)
和 SYNCHRONIZE(*YES)
以确保操作可靠性和环境一致性,并在生产环境操作前充分理解其影响,遇到问题时,仔细检查错误消息和作业日志是诊断的关键步骤。
引用说明:
- 本文核心命令语法、参数定义及功能描述基于 IBM 官方文档 IBM i 7.5 > Reference > CL Reference 中关于
STRSTS
(Start Subsystem) 命令的权威说明。 - 最佳实践和注意事项综合了 IBM i 系统管理红皮书(如 SG24-xxxx 系列)中关于子系统管理的建议以及行业内的普遍运维经验。
- 常见错误消息解释参考了 IBM i 7.5 > Messages 中的相关消息代码 (
CPF21xx
,CPF3C90
) 的官方解释。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4484.html