【问题标题】:z/OS JCL command /*VS command fails when issued in a procz/OS JCL 命令 /*VS 命令在 proc 中发出时失败
【发布时间】:2021-05-19 13:18:48
【问题描述】:

我正在尝试执行某个命令(“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. 

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

【问题讨论】:

  • 这里解释为什么它不起作用。 /*$VS 是一个 JES2 命令(技术上称为 JECL,Job Entry Control Lanuage)。它仅由 JES2 拥有的内部读取器处理。启动任务阅读器 (STCINRDR) 不是 JES2 阅读器,因此它不知道 JECL。这就是命令失败的原因。

标签: proc zos jcl mvs


【解决方案1】:

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

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

COM='V 0A92,OFFLINE'

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

【讨论】:

  • 我已将此命令放在 COMMNDxx 连接中。但是,在 IPL 期间,我收到一条消息,即 IEA863I COM='V 0A92,OFFL SPECIFICATION INVALID IN COMMNDCI。然后我注意到 COMMNDxxx 中的所有其他命令要么是 START 要么是 DUMPDS。所以我决定尝试将 VARY 转换为 proc。我猜 COMMNDxx 只允许命令的子集?
  • 手册只提到了一些限制。 VARY 命令绝对可以工作。 COMMNDCI 成员中的那一行到底长什么样?
  • 好吧,根据您的建议,我创建了一个新的 COMMNDxx 成员并将其添加到 CMD=(xx,yy,...) 连接中。添加到现有 COMMNDCI 时失败的完全相同的语句在我的新 COMMNDxx 成员中表现正常。我现在拥有了我想要的东西,还有一个新成员可以进行任何进一步的定制。所以,谢谢!
  • 我仍然不知道为什么从 COMMNDCI 调用 VARY 失败。唯一的问题是,该成员启动了 JES2、VLF、HZR、VTAM、DLF。我在这些之后添加了 VARY。也许它失败了,因为 JES2 尚未激活。当我的新 COMMNDxx 被激活时,JES2 将有足够的牵引力来处理它?
  • VARY 是一个 MVS 命令。它不需要 JESx 处于活动状态。所有COMMNDxx成员中的命令一个接一个地发出;没有依赖性。需要对您的系统进行进一步调试才能了解发生了什么。
【解决方案2】:

令人困惑的是,有两种方法可以做到这一点,而且它们的名称几乎相同。 不推荐的方法是JCL command statement。 推荐方法是使用COMMAND statement。

请注意,该命令将在转换时发出,在作业运行之前。

编辑 (1) 以添加...

IEFC452I 和 IEE122I 的文档都表明您在某处遇到了 JCL 错误。疯狂猜测:作业没有步骤?

【讨论】:

  • 好的,我已经切换到使用 COMMAND。这确实有效,但我仍然遇到那个讨厌的 IEFC452I 错误。我的 proc 现在是 //MYPROG PROC //TEST COMMAND 'VARY 0A92,OFFLINE'
  • 这是整个输出。您可以看到 COMMAND 有效,并且不需要操作员干预(是的)。但它会产生错误并总是触发 33E 滑动陷阱:
  • [我已将新的 proc 和控制台输出放入我原来的问题中。]
  • 是的,我认为你是对的,工作没有步骤。添加 EXEC 语句修复它。
【解决方案3】:

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

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

现在启动此 proc 时控制台上没有显示错误:

S MYPROG                                                                
IRR812I PROFILE * (G) IN THE STARTED CLASS WAS USED 229                 
        TO START MYPROG WITH JOBNAME MYPROG.                            
$HASP100 MYPROG   ON STCINRDR                                           
VARY  0A92,OFFLINE                                                      
IEE303I 0A92     OFFLINE                                                
IEF695I START MYPROG   WITH JOBNAME MYPROG   IS ASSIGNED TO USER START1 
 , GROUP SYS1                                                           
$HASP373 MYPROG   STARTED                                               
IEF403I MYPROG - STARTED - TIME=13.44.01                                
IEF404I MYPROG - ENDED - TIME=13.44.01                                  
$HASP395 MYPROG   ENDED - RC=0000                                       
$HASP250 MYPROG PURGED -- (JOB KEY WAS D9BC2A80)                        

谢谢!

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2022-07-06
    • 2011-01-14
    相关资源
    最近更新 更多