29 08 | 2012

Démarrage du Zend Server sur IBM i (AS/400)

Rédigé par GAYTE Dominique

Classé dans : PHP sur IBM i, IBM i (AS/400)

Méthodes pour un démarrage automatique et sans erreurs du Zend Server sur IBM i (AS/400)

Très souvent, sur un IBM i, le Zend Server démarre mal à l'IPL. Voici une explication des faits et une méthodologie à appliquer afin de corriger ce problème.

La cause

Si l'on décortique le processus de démarrage, on remarque que le sous système ZENDSVR est démarré automatiquement par le sous système QSYSWRK (travail à démarrage automatique ZS_STR_SBS).

Le sous système ZENDSVR démarre l'instance ZENDSVR du serveur web (travaux ZENDSVR dans le sous système QHTTPSVR) s'il n'est pas déjà actif. Pour visualiser les travaux du serveur web utiliser la commande WRKSBSJOB SBS(QHTTPSVR). Vous devez obtenir l'écran suivant (rechercher les lignes dont le nom du travail est ZENDSVR, il peut y avoir d'autres instances du serveur web sur votre système) :

 
WRKSBS QHTTPSVR WRKSBSJOB SBS(QHTTPSVR)

 Les travaux du serveur PHP (le Zend Server proprement dit) sont gérés avec la commande WRKSBSJOB SBS(ZENDSVR). En voici un exemple :

 
WRKSBSJOB SBS(ZENDSVR) WRKSBS ZENDSVR

Sur certains systèmes, ce démarrage se passe mal, le serveur web n'est pas opérationnel.

En fait, deux processus s'exécutent en parallèle : le démarrage du Zend Server que nous venons d'évoquer et le démarrage de TCP/IP. Si le premier s'effectue trop vite, il tentera d'initialiser le serveur Web alors que le lancement de TCP/IP n'est pas terminé. Il n'y aura pas de message bloquant, mais l'instance ZENDSVR ne sera pas active.

Solutions

Lorsque l'on constate ce problème, il suffit de relancer correctement l'instance défaillante. Procéder sur la ligne de commande avec un profil utilisateur adapté (disposant des droits nécessaires) et tapez :

STRTCPSVR SERVER(*HTTP) HTTPSVR(ZENDSVR)

Au préalable, vous pouvez éventuellement arrêter l'instance qui aurait mal démarré : ENDTCPSVR SERVER(*HTTP)  HTTPSVR(ZENDSVR) . Vérifier qu'il n'y a plus de travaux nommés ZENDSVR dans QHTTPSVR avec la commande WRKSBSJOB. Il peut arriver que certains travaux aient du mal à s'arrêter. Dans ce cas, ne pas hésiter à utiliser un 4, F4 et *IMMED...

Mais cela ne règle pas le démarrage automatique lors du prochain IPL. Il y a plusieurs manières de procéder, à vous de choisir celle qui correspond le mieux à votre environnement et à vos habitudes de travail.

Le principe est simple, il s'agit de s'assurer que l'instance du serveur Web se lancera bien alors que TCP/IP est bien actif.

Première méthode : travail planifié

La méthode la plus simple (mais pas forcément la plus esthétique !) consiste à laisser l'IPL démarrer le Zend Server (en erreur) et à planifier quelques minutes après un redémarrage propre !

Vous pouvez identifier le moment opportun en recherchant dans QSYSOPR le message  "Sous-système QHTTPSVR démarré". Avec F1, notez l'heure à laquelle est survenu ce message qui indique que le serveur Web est opérationnel. 

Voici le programme qui peut être planifié avec la commande WRKJOBSCDE. Il prend en compte la plupart des problèmes qui peuvent se produire :

 

PGM

/*Arret des fonctions du ZS éventuellement démarrées*/

ENDTCPSVR SERVER(*HTTP) HTTPSVR(ZENDSVR)

MONMSG CPF0000

 

/*On arrête aussi le SBS ZENDSVR, non indispensable en général*/

ENDSBS SBS(ZENDSVR) OPTION(*IMMED)

MONMSG CPF0000

 

/*On attend 200 secondes que le sous système soit bien arrêté*/

DLYJOB DLY(200)

 

/*On démarre le serveur Web, puis le sous système ZENDSVR*/

STRTCPSVR SERVER(*HTTP) HTTPSVR(ZENDSVR)

MONMSG CPF0000

 

call ZENDSVR/ZSTRSBS

MONMSG CPF0000

ENDPGM

Si l'IPL ne se produit pas à l'heure habituelle, le travail planifié ne se lancera probablement pas. Vous pouvez toujours soit lancer ce travail planifié avec l'option 10 de la commande WRKJOBSCDE, soit faire directement un CALL de ce programme sur la ligne de commande.  

Seconde méthode : QSTRUP

Si l'on souhaite synchroniser l'IPL et le démarrage du Zend Server, il est alors indispensable de passer par le QSTRUP, nom habituellement donné au programme qui s'exécute automatiquement à chaque IPL.

Afin de ne pas bloquer son déroulement, le QSTRUP lance mon programme de démarrage du Zend Server dans un travail batch. Le QSTRUP pourra se terminer rapidement, alors que des temporisations importantes ralentiront le travail soumis afin qu'il effectue les tâches à un moment adéquat.

Voici, en rouge, la modification apportée au QSTRUP (il s'agit d'un extrait de ce programme) :

....

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:

SBMJOB CMD(CALL PGM(QSYS/STR_ZS)) JOB(STR_ZS) USER(DGAYTE)

RETURN

CHGVAR VAR(&CPYR) VALUE(&CPYR)

ENDPGM

Le programme STR_ZS de QSYS est lancé en batch, sous le nom STR_ZS et sous le profil utilisateur DGAYTE. DGAYTE est un profil qui dispose des droits nécessaires. Le programme QSTRUP tournant sous le profil QPGMR, il faut que ce dernier ait les droits suffisants (*USE) sur le profil cité, ici DGAYTE. La commande à passer dans ce cas est GRTOBJAUT OBJ(DGAYTE) OBJTYPE(*USRPRF) USER(QPGMR)  AUT(*USE).  Le profil ZENDADMIN doit pouvoir être utilisé à cette fin, QSECOFR est interdit !

Voici le contenu du programme STR_ZS :

PGM

/*On attend que TCP/IP soit bien démarré, peut varier selon les systèmes*/

DLYJOB DLY(300)

/*Arret des fonctions du ZS éventuellement démarrées*/

ENDTCPSVR SERVER(*HTTP) HTTPSVR(ZENDSVR)

MONMSG CPF0000

ENDSBS SBS(ZENDSVR) OPTION(*IMMED)

MONMSG CPF0000

DLYJOB DLY(200)

 

STRTCPSVR SERVER(*HTTP) HTTPSVR(ZENDSVR)

MONMSG CPF0000

call zendsvr/zstrsbs

MONMSG CPF0000

ENDPGM

Ce programme est comparable à celui précédemment décrit, à l'exception des DLYJOB qui permettent d'attendre que TCP/IP soit bien actif. Les durées peuvent dépendre de la configuration des systèmes.

 

Nous espérons que cet article vous a été utile. 

Vous avez des questions ? Des remarques ? N'hésitez pas à nous contacter en cliquant ici : Notos, votre expert IBMi

 

Mots clés : AS/400, IBM i, OS/400, Zend Server, PHP

Les commentaires sont fermés.

Qui sommes-nous ?

  • Notos, expert IBMi (AS/400) et spécialiste de l’informatisation des PME/PMI est le partenaire privilégié des entreprises qui veulent moderniser leur Informatique.
  • En savoir plus

Archives

Derniers commentaires