3

我在 RPG 中编写了一个监控程序,用于检查传真/400 是否正常运行。

现在我希望这个程序每 15 分钟检查一次。

我没有在作业调度程序中每 15 分钟放置一个作业(这将很难管理),而是使用DLYJOB.

现在我怎样才能让这个程序在内存中“放置自己”以便它继续运行?

(我想过使用SBMJOB,但我不知道我可以将它放在哪个作业队列中。)

4

3 回答 3

2

这是我过去所做的。对此有两种方法。

  1. 每次程序在运行前使用 DLYJOB 运行时提交一个新作业。
  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:00。然后我将它添加到作业调度程序中以每天早上提交。

至于哪个jobq。我正在使用 QINTER,但它真的可以在任何地方运行。确保您选择了一个具有足够可用运行作业的子系统,因为这需要一个。

如果程序开始达到 100% CPU,则在 QINTER 中运行的负面影响将耗尽您所有的交互式 CPU 并有效地锁定您的系统。

于 2010-10-21T19:17:05.250 回答
2

用于无休止运行的作业的好作业队列是 QSYSNOMAX。这允许运行无限数量的作业。

您可以在QSTRTUP程序中将作业提交到该队列,它会一直保持运行。

于 2010-10-21T20:47:49.077 回答
2

我知道 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.

于 2016-01-25T13:23:22.993 回答