|
Programme d'exit pour pwrdwnsys |
La problématique
De plus en plus d'applications ou de fonctions existant dans un environnement intégré tel qu'OS/400 nécéssitent d'êtres arrêtées selon leurs moyens propres.
A titre d'exemple, les applications suivantes :
- Lotus Domino pour iSeries
- Websphere MQ pour iSeries
- Les serveurs xSeries intégrés (IXS/IXA)
... etc ... etc ... cette liste ne se veut pas exaustive. Nombre d'applications IBM ou non-IBM requièrent d'effectuer une suite d'opérations plus complexes que le simple arrêt d'un sous-système pour terminer leur activité "proprement" et assurer l'intégrité des données !
Lorsque la commande PWRDWNSYS est exécutée, un ordre d'arrêt (cf. ENDSBS) est envoyé à l'ensemble des sous-systèmes actifs. Peu d'applications sont capables d'intercepter cet ordre pour effectuer un arrêt correct.
Comprendre : les "Exit Points" et les "Exit Programs"
Exit Points
Exit Programs
Comprendre : l'exit point relatif au "Power Down System"
Cet "exit point" est utilisé lors de l'exécution des commandes PWRDWNSYS ou ENDSYS.
Quand un utilisateur ou une application invoque la commande PWRDWNSYS ou la commande ENDSYS, le système appelle le programme spécifié dans le registre sous le nom QIBM_QWC_PWRDWNSYS, format PWRD0100.
Attention : le programme référencé N'EST PAS appelé si le système se trouve dans une des conditions suivantes :
- Le système est en mode restreint
- Le système est sous alimentation électrique auxiliaire (UPS)
- Le système s'arrête sous une action *ENDSYS ou *PWRDWNSYS ordonnée par le paramétrage des valeurs systèmes QSTGLOWACN et QSTGLOWLMT
- Le système est une partition secondaire s'arrêtant suite à l'arrêt de la partition primaire.
Un exemple de programme CL
A titre d'exemple, le programme suivant se propose d'arrêter "proprement" un serveur domino et un serveur xSeries intégré.
PGM
DCL VAR(&STATUS) TYPE(*DEC) LENGTH(5 0) MONMSG MSGID(CPF0000)
/* Stop Lotus Domino Servers */
ENDDOMSVR SERVER(<domino_server_name>) OPTION(*CNTRLD) DLYJOB DLY(300) ENDDOMSVR SERVER(<domino_server_name>) OPTION(*IMMED)
/* Stop Integrated xSeries Servers */
RTVCFGSTS CFGD(<windows_server_name>) CFGSTYPE(*NWS) STSCDE(&STATUS) IF COND(&STATUS *GE 20) THEN(DO) VRYCFG CFGOBJ(<windows_server_name>) CFGTYPE(*NWS) STATUS(*OFF) FRCVRYOFF(*YES) ENDDO
... to be completed ...
RETURN ENDPGM
Important :
- Cet exit program n'a pas de paramètres
- Le système ignorera tout code erreur retourné par le programme
Association du programme créé avec l'Exit Point
Après compilation, le programme doit être enregistré :
ADDEXITPGM EXITPNT(QIBM_QWC_PWRDWNSYS) FORMAT(PWRD0100) PGMNBR(1) PGM(<library_name>/<program_name>)
Important :
- Un seul exit program est admis pour cette fonction
- Le paramètre "Program Number" (PGMNBR) doit être égal à "1" : toute autre valeur sera ignorée !
|
 |
|