JCL - MVS:如何在Batch中提交MVS命令检索结果

时间:2018-04-09 16:27:26

标签: mainframe jcl mvs tso

早上好,

在Batch中提交MVS命令后,我想知道是否可以在seq文件中打印结果。谢谢你的时间。

//S02IEBG  EXEC PGM=IEBGENER                     
//SYSUT2   DD SYSOUT=(A,INTRDR),DCB=BLKSIZE=23440
//SYSIN    DD DUMMY                              
//SYSOUT   DD SYSOUT=*                           
//SYSUDUMP DD SYSOUT=*                           
//SYSUT1   DD *,DLM=$$                           
/*$VS,'$DQ'                                      
$$ 

4 个答案:

答案 0 :(得分:1)

您的问题不明确,但如果您的意思是“提交您的工作后,您可以将输出捕获到数据集”,我建议您使用XDC行SDSF中的命令。如果您想要输出的特定部分,请先使用?行命令显示每个输出,然后使用XDC显示要保存的输出。

答案 1 :(得分:1)

是的,可以将SYSOUT写入顺序文件。我以前做过这个,但除非你绝对需要,否则我不推荐它。

您的系统应该有一些SYSLOG管理系统(如SMR / JMR或类似系统),您可以在其中浏览作业生成的SYSOUT。别误会我的意思,我意识到这不是万无一失的。有时您可能需要将SYSOUT写入文件。我需要的原因是因为我循环了很多调试显示,需要有很多行来帮助我调试。

如果你想确保SYSOUT转到一个文件,你需要做的就是把文件放在SYSOUT之后:

//S02IEBG  EXEC PGM=IEBGENER                     
//SYSUT2   DD SYSOUT=(A,INTRDR),DCB=BLKSIZE=23440
//SYSIN    DD DUMMY                              
//SYSOUT   DD  DSN=YOUR.SYSOUT.FILE, 
//         DISP=(NEW,CATLG,DELETE), 
//         UNIT=TEST,SPACE=(TRK,(2,1),RLSE), 
//         DCB=(LRECL=080,BLKSIZE=0,RECFM=FB)                           
//SYSUDUMP DD SYSOUT=*                           
//SYSUT1   DD *,DLM=$$    

如果需要,您可以通过编辑SPACE参数来更改文件的大小。如果您计划多次运行此作业,则需要在此之前添加删除步骤,或者使SYSOUT文件成为可以递增的GDG。否则,DISP的{​​{1}}将无效。

只要您知道正确的文件分配是什么,就可以使用任何DD名称来完成。

答案 2 :(得分:0)

我相信以下内容可能有效。假设您要捕获 DQ 命令的输出: -

//SDSF  EXEC PGM=SDSF
//ISFOUT DD SYSOUT=*
//CMDOUT DD DSN=YOUR.DATASET,
//          DISP=(,CATLG,DELETE),
//          DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0),
//          SPACE=(CYL,(1,1)),UNIT=SYSDA
//ISFIN  DD *
  SET CONSOLE BATCH
  SET DELAY 60
  /$ DQ 
  PRINT FILE CMDOUT
  ULOG
  PRINT
  PRINT CLOSE
/*
// 
  • 显然,这可能需要根据您网站的要求进行定制。

您可能会发现Issuing MVS or JES commands有帮助。

加法评论: -

  

我确实尝试过SDSF,但我无权使用它,这就是我的原因   我正在寻找另一种方式。

然后可能按照以下方式使用TSO / E(REXX): -

  

从TSO / E,您可以使用建立扩展MCS控制台会话   TSO / E CONSOLE命令。激活控制台会话后,您   可以发出MVS™系统和子系统命令并获取命令   响应。本附录描述了不同的命令和   您可以在REXX高管中使用的功能来设置和使用控制台   会话。

Writing REXX Execs to perform MVS operator activities

然而,权威可能是一个问题,如果没有立即,只要有人在你身边就已经关闭了。

这可能有效(我没有测试它的设施): -

/* REXX */
ADDRESS TSO 'CONSPROF SOLDISPLAY(NO)'
ADDRESS TSO 'CONSOLE ACTIVATE'
ADDRESS CONSOLE '$DQ'
/* retrieve output command */
max_iterations = 100
DO i = 1 to max_iterations
   messages_remaining = GETMSG('line.','SOL',,,10)
   IF messages_remaining = 0 THEN leave
END
/* Done so echo retrieved messages
say 'Messages Retrieved are :-'
DO i = 1 to line.0
   say '*** ' line.i
END
ADDRESS TSO 'CONSOLE DEACTIVATE'
EXIT

您需要将其包装到批处理作业中,以便找到以下有用的

解决方案可能是对那些负责拒绝访问SDSF的人说话,这可能会导致授权。这又可能导致打开门,例如能够关闭JES命令。

答案 3 :(得分:0)

您可能有权访问SDSF来查看输出。

要打印的作业旁边,键入 xdc ,这将弹出一个用于数据集分配的面板(或者它可能已经存在)。完成后,将打印输出并关闭它。

如果只需要某个步骤/ sysout的输出,则可以键入?在SDSF的工作旁边。这将为您提供输出列表。与之前相同,在您选择的xdc旁边键入xdc并分配数据集。

如果直接使用命令并需要历史记录,也可以对TSO会话进行此操作。尽管只有在关闭SDSF ULOG后这才起作用。