每天在大型机上运行一些作业,我需要自动获取其他一些jcl或rexx的开始和结束时间,是否可能?

时间:2016-11-16 14:47:50

标签: mainframe jcl rexx

每天在大型机上运行一些作业,我需要自动获取其他jcl或rexx的开始和结束时间,是否可能?

4 个答案:

答案 0 :(得分:3)

是的,这是可能的。正如@SaggingRufus所示,您的作业调度程序(CA JMR,Control-M等)可能会提供此功能 - 请与您的技术人员交谈并询问。

可以通过Rexx interface to SDSF执行此操作,然后安排作业执行Rexx代码。执行Rexx代码的ID必须有权查看要为其检索信息的作业。还有Java interface to SDSF

您可以使用的另一种机制是SMF,但除非您还拥有MXG,否则这不会是一条轻松的道路。

与您的技术人员交谈并解释您想要什么以及为什么,他们可能已经解决了这个问题。

答案 1 :(得分:2)

执行所需操作的标准方法是使用SMF 30条记录。您可以在REXX中执行此操作,但如果您不了解SMF记录的格式,则会有点棘手。您的网站可能有一个像SAS这样的工具,这将使它变得微不足道。

  • 在作业(或任何地址空间)开始时写入SMF 30子类型1。
  • 当作业结束时写入SMF 30子类型。

还有其他几种子类型记录,例如作业步骤终止增量。 SMF 30s包含您可能想要了解的有关批处理作业的所有内容。如果您只想知道作业已经过了多少时间或CPU时间,那么只需阅读子类型5并查看性能部分。

如果你真的必须使用REXX,那么有些产品可以使用REXX API访问SMF数据,例如IBM Transaction Analysis Workbench for z/OS。免责声明:我是该产品的开发者之一。

答案 2 :(得分:1)

如果您的网站使用CA JMR

,此解决方案将有效
//SCANJMR   JOB (11111),'JMRSCAN',                                  
//             CLASS=T,MSGCLASS=X,MSGLEVEL=(1,1),                      
//SCAN     EXEC JMRSCAN                                                
//JMRPRINT DD DSN=&&OUTDATASET,                                 
//            DISP=(NEW,CATLG,),                                       
//            UNIT=SYSDA,SPACE=(TRK,(20,20)),                          
//            DCB=(LRECL=133,RECFM=FB,BLKSIZE=6118)                    
//JMRIN DD *                                                           
 FUNCTION LIST=ALL JOBMASK=* SDATE=16/11/16                            
     EDATE=16/11/16                                                    
/* 

然后您需要做的就是计算此文件中有多少条记录。

如果没有,其他作业调度程序可能会提供类似的功能。

答案 3 :(得分:0)

另一种方法是向运行存储日期的Rexx程序的作业添加一个简单的步骤。

这些步骤甚至不需要在实际的生产工作中,您可以将它们安排为生产作业作为后续作业然后作为前任的作业。

Rexx具有内置时间和日期功能,其使用示例如下: -

rc = audit('OACG22X Invoked by' userid() 'at' time() 'on' date()'.')

您可以使用DIS的MOD或通过读取来更新报告数据,然后使用添加的新记录重写它。 EXECIO 是您正在使用的rexx功能。

当你运行报告时,这将清除数据或者循环GDG(创建一个空的+1)。

以下Rexx与可以使用的内容非常接近(虽然非常夸张,即您基本上对 EXECIO out.1 (使用当前日期和时间),(这只在输出中保留1条记录)): -

/* REXX - CYCLE TAPES WITHIN A POOL FOR EMHA800W BATCH JOB */
 /*--------------------------------------------------------------------*/
 /* read in data from tape cycle dataset                               */
 /*--------------------------------------------------------------------*/
    "EXECIO 1 DISKR CYCTAPE (stem in. FINIS"
    LastTape = SUBSTR(in.1,1,6)
    If LastTape = "XXXXXX" Then NewTape = "SAP001"
    Else Do
      TapeNum = SUBSTR(in.1,5,2)
      If DATATYPE(TapeNum,"N") Then Do
         NewNum = TapeNum + 1
         If Newnum > 4 Then NewNum = 1
         RetCde = NewNum
         Newnum = RIGHT(Newnum,2,"0")
         NewTape = "SAP0"||NewNum
      End
      Else RetCde = 100
    End
    out.1 = NewTape||"   "||DATE("E")||"   "||TIME("N")
    "EXECIO 1 DISKW CYCTAPEO (stem out. FINIS"
   Say "Return Code will be "||RetCde
   Return RetCde

通过批处理运行Rexx详见How can I run my Rexx program as a batch job?

我没有使用过Zeke,但是从一个非常简短的搜索中可以看出你可以检查 EMR (事件主记录)。