2018120317202018-12-03 Check Daily Batch Jobs started or not

Check Daily Batch Jobs started or not
CHKBCHJOB CLP read file CHKBCHJOBP and check current time >=  start time and current time < end time and chkflg ='Y',
then call API get the job active information, If job does not active, then send the job not acticve message to sysopr.
If job active, but status is MSGW, also send message to sysopr.
File : QDDSSRC Member: CHKBCHJOBP Type : PF Usage : CrtPF File(CHKBCHJOBP)
A***************************************************************** A* FUNCTION : CHKBCHJOB monitor batch job file A* FILE : CHKBCHJOBP A* AUTHOR : Vengoal Chang A* DATE : 2018/12/03 A***************************************************************** A UNIQUE A R BCHJOBR TEXT('Batch job record') A JOBNAME 10A COLHDG(' JOB NAME') A JOBUSER 10A COLHDG(' USER') A STRTIME 6S 0 COLHDG('start time') A ENDTIME 6S 0 COLHDG('end time') A CHKFLAG 1A COLHDG('check Y/N') A NOTE 32O COLHDG('note') A UPDDATE 8S 0 COLHDG('update date') A UPDTIME 6S 0 COLHDG('update time') A*---------------------------------------------------------------- A K JOBNAME
File : QCLSRC Member: CHKBCHJOBC Type : CLP OS400 : V5R4 above Usage : CrtClPgm Pgm(ChkBCHJOBC)
/* =============================================================== */ /* = Program ChkBchJobC = */ /* = ChkBchJob CLP = */ /* = Paramater notes: = */ /* = Read CHKBCHJOBP file to check daily job active or not = */ /* =============================================================== */ /* = Date : 2018/12/03 = */ /* = Author: Vengoal Chang = */ /* =============================================================== */ PGM DCL &CURTIMEC *CHAR 6 DCL &STRTIMEC *CHAR 6 DCL &ENDTIMEC *CHAR 6 DCL &CURTIME *DEC (6 0) DCL &MSGTEXT *CHAR 256 DCL &USP_NAME *CHAR 10 DCL &USP_LIB *CHAR 10 DCL &USP_QUAL *CHAR 20 DCL &USP_TYPE *CHAR 10 DCL &USP_SIZE *CHAR 4 DCL &USP_FILL *CHAR 1 DCL &USP_AUT *CHAR 10 DCL &USP_TEXT *CHAR 50 DCL &API_USQUAL *CHAR 20 DCL &API_JBQUAL *CHAR 26 DCL &API_JBNAM *CHAR 10 DCL &API_USER *CHAR 10 DCL &API_JOBNR *CHAR 6 DCL &API_STATUS *CHAR 10 DCL &STARTPOS *CHAR 4 DCL &DATALEN *CHAR 4 DCL &HEADER *CHAR 150 DCL &LST_OFFSET *DEC (10 0) DCL &LST_SIZE *DEC (10 0) DCL &LST_DATA *CHAR 4096 DCL &LST_NBR *DEC (5 0) DCL &LST_LEN *DEC (5 0) DCL &LST_LENBIN *CHAR 4 DCL &LST_POSBIN *CHAR 4 DCL &LST_COUNT *DEC (5 0) VALUE(0) DCL &EXC_COUNT *DEC (5 0) VALUE(0) DCL &TYPE *CHAR 1 VALUE('*') DCL &NBRTORTN *CHAR 4 DCL &KEYSTORTN *CHAR 16 DCL &KEY1 *CHAR 4 DCL &KEY2 *CHAR 4 DCL &KEY3 *CHAR 4 DCL &KEY4 *CHAR 4 DCL &SBSSYS *CHAR 20 DCL &WRKSTS *CHAR 4 DCL &MSGRPLY *CHAR 1 DCL &USER *CHAR 10 DCL &CURUSR *CHAR 10 DCL &JOBNBR *CHAR 6 DCL &STATUS *CHAR 10 DCL &JOBTYPE *CHAR 1 DCL &SUBTYPE *CHAR 1 DCLF CHKBCHJOBP MONMSG (CPF0000 MCH0000) *NONE GOTO ERROR READF: RCVF MONMSG CPF0864 *N GOTO ENDF RTVSYSVAL SYSVAL(QTIME) RTNVAR(&CURTIMEC) CHGVAR &CURTIME &CURTIMEC IF (&CURTIME >= &STRTIME *AND + &CURTIME < &ENDTIME *AND + &CHKFLAG = 'Y') Do CallSubR SubR(ListJob) If (&LST_NBR *EQ 0) Do CHGVAR &STRTIMEC &STRTIME CHGVAR &ENDTIMEC &ENDTIME CHGVAR &MSGTEXT + ('* Bctch Job=' *CAT + &JOBNAME *CAT 'run time : ' *CAT + &STRTIMEC *BCAT '~' *BCAT &ENDTIMEC *CAT + ', program not started !') SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) + MSGDTA(&MSGTEXT) TOMSGQ(*SYSOPR) EndDo EndDo Goto READF ENDF: Return Error: Call QMHMOVPM ( ' ' + '*DIAG' + x'00000001' + '*PGMBDY' + x'00000001' + x'0000000800000000' + ) Call QMHRSNEM ( ' ' + x'0000000800000000' + ) /****************************************************************/ /* Sub routine ListJob */ /****************************************************************/ SUBR SUBR(ListJob) CHGVAR VAR(%BIN(&NBRTORTN)) VALUE(4) /* 0101 -- Ststus as WRKACTJOB */ CHGVAR VAR(%BIN(&KEY1 )) VALUE(0101) /* 1906 -- Subsystem */ CHGVAR VAR(%BIN(&KEY2 )) VALUE(1906) /* 1307 -- Message Reply */ CHGVAR VAR(%BIN(&KEY3 )) VALUE(1307) /* 0305 -- Current user profile */ CHGVAR VAR(%BIN(&KEY4 )) VALUE(0305) CHGVAR VAR(&KEYSTORTN) VALUE(&KEY1 *CAT &KEY2 *CAT + &KEY3 *CAT &KEY4) CHGVAR VAR(&USP_NAME) VALUE('CHKJOBNAME') CHGVAR VAR(&USP_LIB) VALUE('QTEMP') CHGVAR VAR(&USP_QUAL) VALUE(&USP_NAME *CAT + &USP_LIB) CHGVAR VAR(&USP_TYPE) VALUE('MYTYPE') CHGVAR VAR(%BIN(&USP_SIZE)) VALUE(128000) CHGVAR VAR(&USP_FILL) VALUE(' ') CHGVAR VAR(&USP_AUT) VALUE('*USE') CHGVAR VAR(&USP_TEXT) VALUE('my user space') DLTUSRSPC USRSPC(&USP_LIB/&USP_NAME) MONMSG CPF0000 CALL PGM(QUSCRTUS) PARM(&USP_QUAL &USP_TYPE + &USP_SIZE &USP_FILL &USP_AUT &USP_TEXT) CHGVAR VAR(&API_USQUAL) VALUE(&USP_QUAL) CHGVAR VAR(&API_JBNAM) VALUE(&JOBNAME) CHGVAR VAR(&API_USER) VALUE('*ALL') /* CHGVAR VAR(&API_USER) VALUE(&JOBUSER) */ CHGVAR VAR(&API_JOBNR) VALUE('*ALL') CHGVAR VAR(&API_STATUS) VALUE('*ACTIVE') CHGVAR VAR(&API_JBQUAL) VALUE(&API_JBNAM *CAT + &API_USER *CAT &API_JOBNR) CALL PGM(QUSLJOB) PARM(&API_USQUAL 'JOBL0200' + &API_JBQUAL &API_STATUS X'00000000' + &TYPE &NBRTORTN &KEYSTORTN) CHGVAR VAR(%BIN(&STARTPOS)) VALUE(1) CHGVAR VAR(%BIN(&DATALEN)) VALUE(140) CALL PGM(QUSRTVUS) PARM(&API_USQUAL &STARTPOS + &DATALEN &HEADER) CHGVAR VAR(&LST_OFFSET) VALUE(%BIN(&HEADER 125 4)) CHGVAR VAR(&LST_SIZE) VALUE(%BIN(&HEADER 129 4)) CHGVAR VAR(&LST_NBR) VALUE(%BIN(&HEADER 133 4)) CHGVAR VAR(&LST_LEN) VALUE(%BIN(&HEADER 137 4)) CHGVAR VAR(%BIN(&LST_POSBIN)) VALUE(&LST_OFFSET + 1) CHGVAR VAR(&LST_LENBIN) VALUE(%SST(&HEADER 137 4)) CHGVAR VAR(&LST_COUNT) VALUE(0) IF (&LST_NBR *EQ 0) DO /* Job not found */ Goto Lst_End ENDDO LST_LOOP: IF COND(&LST_COUNT *EQ &LST_NBR) THEN(GOTO + CMDLBL(LST_END)) CALL PGM(QUSRTVUS) PARM(&API_USQUAL &LST_POSBIN + &LST_LENBIN &LST_DATA) CHGVAR VAR(&JOBNAME) VALUE(%SST(&LST_DATA 1 10)) CHGVAR VAR(&USER) VALUE(%SST(&LST_DATA 11 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&LST_DATA 21 6)) CHGVAR VAR(&STATUS) VALUE(%SST(&LST_DATA 43 10)) CHGVAR VAR(&JOBTYPE) VALUE(%SST(&LST_DATA 53 1)) CHGVAR VAR(&SUBTYPE) VALUE(%SST(&LST_DATA 54 1)) /* for status */ CHGVAR VAR(&WRKSTS ) VALUE(%SST(&LST_DATA 81 4)) /* for subsystem */ CHGVAR VAR(&SBSSYS ) VALUE(%SST(&LST_DATA 101 20)) /* for msgrply */ CHGVAR VAR(&MSGRPLY) VALUE(%SST(&LST_DATA 137 1)) /* for current user */ CHGVAR VAR(&CURUSR ) VALUE(%SST(&LST_DATA 157 10)) IF (&WRKSTS *EQ 'MSGW' *AND &MSGRPLY *EQ '1') DO CHGVAR &MSGTEXT ('* Job' *BCAT + &JOBNBR *TCAT '/' *CAT + &USER *TCAT '/' *CAT + &JOBNAME *BCAT 'status is' *BCAT + &WRKSTS *TCAT '.') SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) + MSGDTA(&MSGTEXT) TOMSGQ(*SYSOPR) EndDo CHGVAR VAR(&LST_COUNT) VALUE(&LST_COUNT + 1) CHGVAR VAR(%BIN(&LST_POSBIN)) + VALUE(%BIN(&LST_POSBIN) + &LST_LEN) GOTO CMDLBL(LST_LOOP) LST_END: DLTUSRSPC USRSPC(&USP_LIB/&USP_NAME) ENDSUBR EndPgm: EndPgm
File : QCLSRC Member: CHKBCHJOB Type : CLP Usage : CRTCLPGM CHKBCHJOB Insert your batch job which need to be monitored to CHKBCHJOBP SBMJOB CMD(CALL CHKBCHJOB) JOB(CHKBCHJOB) PGM /*-- Global error monitoring: --------------------------------------*/ MonMsg CPF0000 *N GoTo Error Loop: Call ChkBchJobC DlyJob 300 Goto Loop Return: Return /*-- Error handling: -----------------------------------------------*/ Error: Call QMHMOVPM ( ' ' + '*DIAG' + x'00000001' + '*PGMBDY' + x'00000001' + x'0000000800000000' + ) Call QMHRSNEM ( ' ' + x'0000000800000000' + ) EndPgm: EndPgm
回應
AS/400 系統應用電子報





Powered by Xuite
    沒有新回應!
平均分數:0 顆星
投票人數:0
我要評分:
關鍵字
IBM 最佳夥伴
AS/400 非官方網站