Ежедневно в мэйнфреймах запускается несколько заданий, мне нужно автоматически выбирать время их начала и окончания с помощью некоторого другого jcl или rexx, возможно ли это?

Ежедневно в мэйнфреймах запускается несколько заданий, мне нужно автоматически выбирать время их начала и окончания с помощью некоторого другого jcl или rexx, возможно ли это?

4 ответа

Да, это возможно. Как указывает @SaggingRufus, ваш планировщик заданий (CA JMR, Control-M и т. Д.) Может предоставить эту функцию - поговорите с вашим техническим персоналом и спросите.

Это можно сделать через интерфейс Rexx для SDSF, а затем составить расписание для выполнения кода Rexx. Идентификатор, под которым выполняется код Rexx, должен иметь полномочия для просмотра заданий, для которых вы хотите получить информацию. Существует также интерфейс Java для SDSF.

Другим механизмом, который может быть доступен вам, является SMF, но это не будет легкой дорогой, если у вас также нет MXG.

Поговорите со своим техническим персоналом и объясните, что вы хотите и почему, возможно, они уже решили эту проблему.

Стандартный способ сделать то, что вы хотите, это использовать записи SMF 30. Вы можете сделать это в REXX, но будет немного сложно, если вы не понимаете формат записей SMF. Ваш сайт может иметь такой инструмент, как SAS, который сделает его тривиальным.

  • SMF 30 подтип 1 записывается при запуске задания (или любого адресного пространства).
  • SMF 30 подтип 5 записывается, когда работа заканчивается.

Существует несколько других записей подтипов, таких как дельты завершения шага задания. SMF 30 содержат абсолютно все, что вы могли бы знать о пакетной работе. Если вы просто хотите узнать, сколько времени заняло задание или процессорное время, просто прочитайте подтип 5 и посмотрите раздел производительности.

Если вы действительно должны использовать REXX, то есть продукты с API REXX для доступа к данным SMF, такие как IBM Transaction Analysis Workbench для z / OS. Отказ от ответственности: я один из разработчиков этого продукта.

Это решение будет работать, если ваш сайт использует 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                                                    
/* 

тогда все, что вам нужно сделать, это получить количество записей в этом файле.

Если нет, другие планировщики заданий могут предоставлять аналогичные функции.

Другим способом может быть добавление простых шагов к заданиям, которые запускают программу Rexx, в которой хранится дата.

Эти шаги даже не должны выполняться в реальных производственных заданиях, их можно запланировать как задания с производственным заданием в качестве преемника, а затем как предшественника.

Rexx имеет встроенные функции времени и даты, пример их использования:

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

Вы можете обновить данные отчета, используя DISP of 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 через пакет подробно описан здесь. Как мне запустить программу Rexx как пакетное задание?,

Я не использовал Zeke, но из очень короткого поиска выяснилось, что вы можете проверить EMR (Event Master Record).

Другие вопросы по тегам