我在 RPG 中编写了一个监控程序,用于检查传真/400 是否正常运行。
现在我希望这个程序每 15 分钟检查一次。
我没有在作业调度程序中每 15 分钟放置一个作业(这将很难管理),而是使用DLYJOB
.
现在我怎样才能让这个程序在内存中“放置自己”以便它继续运行?
(我想过使用SBMJOB
,但我不知道我可以将它放在哪个作业队列中。)
我在 RPG 中编写了一个监控程序,用于检查传真/400 是否正常运行。
现在我希望这个程序每 15 分钟检查一次。
我没有在作业调度程序中每 15 分钟放置一个作业(这将很难管理),而是使用DLYJOB
.
现在我怎样才能让这个程序在内存中“放置自己”以便它继续运行?
(我想过使用SBMJOB
,但我不知道我可以将它放在哪个作业队列中。)
这是我过去所做的。对此有两种方法。
我对 Monitor MSGW 程序所做的事情如下:
PGM
DCL VAR(&TIME) TYPE(*CHAR) LEN(6)
DCL VAR(&STOPTIME) TYPE(*CHAR) LEN(6) +
VALUE('200000')
/* Setup my program (run only once) */
START:
/* Perform my actions */
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
IF COND(&TIME *GE &STOPTIME) THEN(GOTO CMDLBL(END))
DLYJOB DLY(180)
GOTO CMDLBL(START)
END:
ENDPGM
这将持续运行到晚上 8:00。然后我将它添加到作业调度程序中以每天早上提交。
至于哪个jobq。我正在使用 QINTER,但它真的可以在任何地方运行。确保您选择了一个具有足够可用运行作业的子系统,因为这需要一个。
如果程序开始达到 100% CPU,则在 QINTER 中运行的负面影响将耗尽您所有的交互式 CPU 并有效地锁定您的系统。
用于无休止运行的作业的好作业队列是 QSYSNOMAX。这允许运行无限数量的作业。
您可以在QSTRTUP程序中将作业提交到该队列,它会一直保持运行。
我知道 3 种方法。
1) using Data queue, there is parm to tell it to wait endlessly and at time-interval.
2) using OVRDBF cmd, there is parm there to tell that it should not end or EOF, making your pgm to keep on waiting.
3) easiest to implement, sbmjob to call a pgm that loops forever eg with DOW 1=1, you can insert a code to check for certain time interval before it iterates. You can have your logic inside the loop that checks for fax, process it and then back to waiting.