Le seul sous-système démarré à l'IPL est le sous-système de contrôle. Il est défini par la valeur système QCTLSBSD. La modification de ce sous-système n'est prise en compte que lors de l'IPL Ce sous-système doit reconnaître IMPERATIVEMENT la console , de préférence la jobq QCTL. Il est donc conseillé de tester ce sous-système (STRSBS normal) avant de le déclarer sous-système de contrôle. Les sous-systèmes QCTL et QBASE (livrés avec l'AS/400) peuvent être définis sous-système de contrôle. QBASE est un sous-système généraliste qui reconnait TOUTES les entrées possibles. QCTL est un sous-système spécifiquement sous-système de contrôle. |
Ces deux sous-systèmes ont un travail à démarrage automatique utilisant la JOBD QSTRUPJD. Cette JOBD à comme profil QPGMR comme RQSDTA 'CALL QWDAJPGM'. le pgm QWDAJPGM recherche la valeur système QSTRUPPGM cette valeur système contient le nom du programme à appeler quand le sous-système de contrôle démarre (SI CELUI-CI UTILISE QWDAJPGM) puis il transfère le contrôle à ce pgm (cde TFRCTL). QSTRUP (pgm par défaut) démarre les éditeurs(suivant QSTRPRTWTR) démarre QINTER,QBATCH,QCMN si QCTLSBSD = QCTL. vous pouvez extraire le source de ce pgm (RTVCLSRC) Ce qui a été fait ici : |
/********************************************************************/ /* 5761SS1 V6R1M0 080215 Sortie RTVCLSRC 08/07/08 17:52:24 */ /* */ /* Nom du programme . . . . . . . . . . . . : QSTRUP PN*/ /* Nom de la bibliothèque . . . . . . . . . : QSYS PL*/ /* Fichier source initial . . . . . . . . . : S000028739 SN*/ /* Nom de la bibliothèque . . . . . . . . . : $BLDSS1 SL*/ /* Membre source initial . . . . . . . . . : S000028739 SM*/ /* Modification du fichier source */ /* date/heure . . . . . . . . . . . . . . : 30/09/07 16:27:39 SC*/ /* Option de modification . . . . . . . . . : *NOPATCH PO*/ /* Profil utilisateur . . . . . . . . . . . : *USER UP*/ /* Texte . . : TX*/ /* Propriétaire . . . . . . . . . . . . . . : QSYS OW*/ /* Marquage modification utilisateur . . . : *NO UM*/ /* Retrieve include source . . . . . . . . : *NO RI*/ /********************************************************************/ PGM DCL VAR(&STRWTRS) TYPE(*CHAR) LEN(1) DCL VAR(&CTLSBSD) TYPE(*CHAR) LEN(20) DCL VAR(&CPYR) TYPE(*CHAR) LEN(90) VALUE('5761-SS1 (C) COPYRIGHT- IBM CORP 1980, 2007. LICENSED MATERIAL - PROGRAM PROPERTY OF IBM') |
QSYS/STRSBS SBSD(QSERVER) MONMSG MSGID(CPF0000) QSYS/STRSBS SBSD(QUSRWRK) MONMSG MSGID(CPF0000) QSYS/RLSJOBQ JOBQ(QGPL/QS36MRT) MONMSG MSGID(CPF0000) QSYS/RLSJOBQ JOBQ(QGPL/QS36EVOKE) MONMSG MSGID(CPF0000) QSYS/STRCLNUP MONMSG MSGID(CPF0000) QSYS/RTVSYSVAL SYSVAL(QCTLSBSD) RTNVAR(&CTLSBSD) IF COND((&CTLSBSD *NE 'QCTL QSYS ') *AND (&CTLSBSD *NE- 'QCTL QGPL ')) THEN(GOTO CMDLBL(DONE)) QSYS/STRSBS SBSD(QINTER) MONMSG MSGID(CPF0000) QSYS/STRSBS SBSD(QBATCH) MONMSG MSGID(CPF0000) QSYS/STRSBS SBSD(QCMN) MONMSG MSGID(CPF0000) DONE: QSYS/STRSBS SBSD(QSPL) MONMSG MSGID(CPF0000) |
QSYS/RTVSYSVAL SYSVAL(QSTRPRTWTR) RTNVAR(&STRWTRS) IF COND(&STRWTRS = '0') THEN(GOTO CMDLBL(NOWTRS)) CALL PGM(QSYS/QWCSWTRS) MONMSG MSGID(CPF0000) NOWTRS: RETURN CHGVAR VAR(&CPYR) VALUE(&CPYR) ENDPGM Si vous définissez un sous-système de contrôle "maison" il faut donc prévoir un travail à démarrage automatique pour démarrer les autres sous-système ou définir le même que QCTL et QBASE, ou appeler QSTRUP (modifié ou non) sous peine de devoir passer les commandes STRSBS à la console à chaque IPL Vous pouvez savoir si le dernier ARRET était NORMAL ou ANORMAL via la valeur système QABNORMSW '0' = dernier arrêt normal '1' = dernier arrêt anormal. et donc effectuer des traitements en conséquence. |