2010-10-21 4 views
3

J'ai codé un programme de surveillance dans RPG qui vérifie si le fax/400 est opérationnel.Comment conserver un programme RPG en mémoire?

Et maintenant je veux que ce programme vérifie toutes les 15 minutes. Au lieu de placer un travail toutes les 15 minutes dans le planificateur de travail (ce qui serait moche à gérer), j'ai fait attendre le programme entre les vérifications en utilisant DLYJOB.

Maintenant, comment puis-je faire en sorte que ce programme se "place" en mémoire afin qu'il continue à fonctionner?

(je pensais que l'utilisation SBMJOB, mais je ne peux pas figurer dans quelle file d'attente emploi que je pouvais placer.)

Répondre

2

QSYSNOMAX est une bonne file d'attente à utiliser pour un travail sans fin. Cela permet d'exécuter un nombre illimité de tâches.

Vous pouvez soumettre le travail à cette file d'attente dans votre programme QSTRTUP et il restera simplement actif tout le temps.

2

Voici ce que je l'ai fait dans le passé. Il y a deux approches à cela.

  1. Soumettez un nouveau travail chaque fois que le programme s'exécute avec DLYJOB avant son exécution.
  2. Créer une boucle et uniquement la fin dans certaines conditions.

Ce que je l'ai fait avec un programme moniteur MSGW était le suivant:

  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 

Cela se déroulera en continu jusqu'à 20h00. Ensuite, je l'ajoute à l'ordonnanceur de travail à soumettre tous les matins.

Pour autant que jobq. J'utilise QINTER, mais il pourrait vraiment être exécuté n'importe où. Assurez-vous de choisir un sous-système avec suffisamment de travaux en cours d'exécution, car cela en prendra un.

Le négatif d'exécution dans QINTER si le programme commence à atteindre 100% CPU, qui utilisera toute votre CPU interactive et verrouillera efficacement votre système.

2

Je connais trois façons de faire cela. 1) En utilisant la file d'attente de données, il y a un mot à dire pour attendre indéfiniment et à intervalle de temps.
2) en utilisant OVRDBF cmd, il y a parm là pour dire qu'il ne devrait pas se terminer ou EOF, ce qui fait que votre pgm continue d'attendre.
3) plus facile à implémenter, sbmjob pour appeler un pgm qui boucle pour toujours, par exemple avec DOW 1 = 1, vous pouvez insérer un code pour vérifier pendant un certain intervalle de temps avant qu'il itère. Vous pouvez avoir votre logique à l'intérieur de la boucle qui vérifie le fax, le traiter et ensuite revenir en attente.

+1

# 3 peut être un porc de performance, sauf si vous utilisez quelque chose comme DLYJOB pour l'attendre. – jmarkmurphy

Questions connexes