[Win32Service] Comment utiliser les paramètres de Récupération

Par @jbnahan69
Win32Service Logo
Win32Service Logo

Vous avez des services Windows écrit en PHP ? Il utilise l'extension Win32Service ? La version 0.4 apporte la gestion des options de récupération des services.

Ces paramètres permettent de définir des actions à réaliser dans le cas ou votre service défaille. Il existe 3 situations et donc 3 actions possibles qui sont :

  1. Action à réaliser lors de la première défaillance
  2. Action à réaliser lors de la seconde défaillance
  3. Action à réaliser lors des défaillances suivantes

Comment le gestionnaire des services compte-t-il les défaillances ?

Une défaillance est comptée si le programme exécuté sort en indiquant au gestionnaire de service un code retour différent de 0 (zéro).

Avant la version 0.4, quelle que soit la raison de la fin de l'exécution de PHP, la sortie était toujours avec un code égale à 0. Pour permettre de sortir avec une erreur, deux fonctions ont été ajoutées : win32_set_service_exit_mode et win32_set_service_exit_code.

"win32_set_service_exit_mode" permet de modifier le mode de sortie en passant l'argument à faux. PHP informera le gestionnaire des services que la sortie n'est pas correcte.

"win32_set_service_exit_code" permet de définit un code d'erreur lié a l'erreur rencontrée dans votre code. Ce numéro sera converti en "raison de l'erreur" puis enregistré dans le journal d'évènement de Windows.

Il est conseillé d'utiliser ces deux fonctions dès le lancement de votre service pour définir les paramètres de sortie. Ainsi la moindre erreur générée par PHP ou votre code déclenchera la gestion des défaillances.

Maintenant que nous pouvons signaler au gestionnaire des services que notre service défaille, il est intéressant de savoir comment sont utilisées les actions liées aux défaillances. Le gestionnaire de service tient un compteur des défaillances. Ce compteur est remis à zéro après un certain délai (1 jour pas défaut, il est configurable avec le paramètre 'recovery_reset_period' lors de l'enregistrement du service) selon ce compteur, les actions sont exécutées.

Comment les actions en cas de défaillance sont-elles configurées ?

Pour cela il y a deux moyens : soit lors de l'enregistrement du service via la fonction 'win32_create_service' soit en utilisant l'interface graphique du gestionnaire des services.
Avec la fonction 'win32_create_service', il existe plusieurs options de configuration liée à la gestion des défaillances. Le nom de toutes ces options commence par 'recovery_'.

Dorénavant, notre service se relance s'il défaille, mais à quoi correspond le paramètre 'recovery_delay'. Ce paramètre contient le délai entre la défaillance et l'exécution de l'action à exécuter suite à la défaillance. Il est exprimé en milliseconde et vaut 60000 millisecondes par défaut (soit 1 minute).

Comment réagit le service si la demande d'arrêt est demandée par le gestionnaire de service ?

Pour que la sortie soit correcte et que le gestionnaire de service ne considère pas que l'arrêt est une défaillance, il faut avoir informé le gestionnaire des services que votre service est stoppé via cette fonction 'win32_set_service_status'.

Nous avons fait le tour de cette nouvelle fonctionnalité. À vous d'expérimenter. Si vous avez des questions ou des remarques, les commentaires sont là !

Lire également:

Author avatar
Jean-Baptiste Nahan

Consultant Expert Web, j'aide les entreprises ayant des difficultés avec leur projet Web (PHP, Symfony, Sylius).

@jbnahan69 | Macintoshplus | Linkedin | JB Dev Labs