如何让RPG程序在内存中运行?

时间:2010-10-21 19:06:17

标签: rpgle ibm-midrange

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

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

我不是每15分钟在作业调度程序中放置一个作业(管理起来很难),而是让程序在使用DLYJOB的检查之间等待。

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

(我想过使用SBMJOB,但我无法确定可以放置哪个作业队列。)

3 个答案:

答案 0 :(得分:2)

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

  1. 每次程序在运行之前使用DLYJOB运行时提交新作业。
  2. 创建一个循环,并且仅在某个条件下结束。
  3. 我使用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,你可以插入一个代码来检查迭代之前的某个时间间隔。您可以在循环中检查传真,处理传真,然后再返回等待。