z/OS JCL 命令 /*VS 命令在 proc 中发出时失败

问题描述

我正在尝试执行某个命令(“vary devaddr,OFFLINE”)以在系统启动期间自动运行。我找不到命令应该放在哪里。我尝试在 proc 中设置命令,如下所示:

//MYPROG PROC MODULE='IEFBR14'  
/*$VS,'V 0A92,OFFLINE'         
//DOIT   EXEC pgm=&MODULE      
//*  

如果我发出 START MYPROG 我总是收到错误

IEFC452I MYPROG - 作业未运行 - JCL 错误 181 $HASP396 MYPROG 终止
IEE122I 启动命令 JCL 错误

但是,如果我从 proc 中删除命令 ('/*$VS,...'),它就可以正常启动和完成。此外,如果我创建一个作业而不是一个 proc,我可以提交它并成功完成。

我的全部目的是在每次 IPL 后让该装置脱机,无需操作员干预。有没有人有在 JCL 中嵌入命令的经验,或者有其他方法来实现这一点?

在 cshneid 的回答之后,我编辑了我的 proc 如下:

//MYPROG PROC                          
//TEST   COMMAND  'vary  0A92,OFFLINE' 

我的控制台输出现在看起来像:

S MYPROG                                                         
IRR812I PROFILE * (G) IN THE STARTED CLASS WAS USED 121          
        TO START MYPROG WITH JOBNAME MYPROG.                     
$HASP100 MYPROG   ON STCINRDR                                    
vary  0A92,OFFLINE                                               
IEFC452I MYPROG - JOB NOT RUN - JCL ERROR 124                    
IEF281I 0A92 Now OFFLINE                                         
$HASP396 MYPROG   TERMINATED                                     
IEE122I START COMMAND JCL ERROR                                  
IEA989I SLIP TRAP ID=X33E MATCHED.  JOBNAME=*UNAVAIL,ASID=0059. 

无论我如何安排过程,这似乎都是模式。

解决方法

有一种更好的方法可以让系统在初始化 (IPL) 时自动运行命令:使用 COMMNDxx Parmlib 成员。有关详细信息,请参阅 z/OS MVS Initialization and Tuning Reference

COMMNDxx(或串联中的任何 PARMLIB)中创建一个 SYS1.PARMLIB 成员并在那里添加命令:

COM='V 0A92,OFFLINE'

您可以将命令放在默认成员 COMMND00 或任何 COMMNDxx 成员中,并将 xx 后缀添加到要执行的命令成员列表中,即添加到 {{1 CMD=... 成员中的 }} 参数。

,

这次终于有了。我只是在 COMMAND 语句之后添加了一个 EXEC 语句。它看起来像这样:

(test (<= ?life_expectancy 11))

当这个过程启动时,控制台上现在没有显示错误:

//MYPROG PROC                          
//TEST   COMMAND  'VARY  0A92,OFFLINE' 
//STEP1  EXEC     PGM=IEFBR14          

谢谢!