我在RPG中编写了一个监控程序,用于检查传真/ 400是否正常运行。
现在我希望这个程序每15分钟检查一次。
我不是每15分钟在作业调度程序中放置一个作业(管理起来很难),而是让程序在使用DLYJOB
的检查之间等待。
现在我怎么能让这个程序“放置在内存中”以便它继续运行?
(我想过使用SBMJOB
,但我无法确定可以放置哪个作业队列。)
答案 0 :(得分:2)
这是我过去所做的。有两种方法。
我使用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点。然后我将其添加到作业计划程序,每天早上提交。
至于哪个jobq。我正在使用QINTER,但它可以在任何地方运行。确保选择具有足够可用运行作业的子系统,因为这将占用一个。
如果程序开始达到100%CPU,那么在QINTER中运行是否定的,这将耗尽所有交互式CPU并有效锁定系统。
答案 1 :(得分:2)
用于无休止的工作的好工作队列将是QSYSNOMAX。这允许无限数量的作业运行。
您可以将作业提交到QSTRTUP程序中的该队列,它将一直保持运行状态。
答案 2 :(得分:2)
我知道3种方法。
1)使用数据队列,有parm告诉它无休止地等待,并按时间间隔
2)使用OVRDBF cmd,那里有parm告诉它不应该结束或EOF,让你的pgm继续等待。
3)最容易实现,sbmjob调用永远循环的pgm,例如DOW 1 = 1,你可以插入一个代码来检查迭代之前的某个时间间隔。您可以在循环中检查传真,处理传真,然后再返回等待。