PHP-FPM et systemd

Ceux qui lisent les notes de versions auront peut-être remarqué la nouveauté :

- FPM:
  . Add --with-fpm-systemd option to report health to systemd, and
    systemd_interval option to configure this. The service can now use
    Type=notify in the systemd unit file. (Remi)

Bien évidement cette option est appliquée sur les RPM PHP 5.4.16 de Fedora 18  et PHP 5.5.0RC3 de Fedora 19, ainsi que ceux de mon dépôt (fedora >= 16).

Dans le fichier de description du service on trouve donc désormais la ligne

Type=notify

Ce qui signifie que systemd recevra la confirmation du démarrage, et périodiquement une information de santé, envoyées par le processus principal de php-fpm. L'intervalle peut-être réglé à l'aide de l'option systemd_interval (dans /etc/php-fpm.conf), réglé par défaut à 10" (0 pour désactiver).

Lors du lancement, la ligne "Status" contient:

      Status: "Ready to handle connections"

Ensuite cette ligne est actualisée et contient des informations utiles sur la santé du service :

      Status: "Processes active: 0, idle: 5, Requests: 101, slow: 2, Traffic: 6.2req/sec"

C'est à dire, le nombre de processus actifs et disponibles, le nombre total de requêtes et de requêtes lentes depuis le démarrage du service, ainsi que le trafic depuis la dernière mise à jour.

J'en ai profité pour corrigé un bug découvert lors de mes tests :

- FPM:
  . Fixed Bug #64915 (error_log ignored when daemonize=0). (Remi)

Avant cette correction, quelque soit la valeur de l'option error_log, les messages émis par php-fpm étaient tracés dans le journal système au lieu du fichier indiqué (/var/log/php-fpm/error.log). Il est évidement possible d'utiliser le journal système en le précisant explicitement :

error_log = syslog

Une autre possibilité offerte par cette intégration est d'utiliser le mode Watchdog de systemd.

Pour cela, il faut modifier le fichier de description du service, en commençant par le copier dans /etc

cp /lib/systemd/system/php-fpm.service /etc/systemd/system/php-fpm.service 

À partir de Fedora 19 on peut aussi, plus simplement, créer un fichier /etc/systemd/system/php-fpm.service.d/watchdog.conf

Ensuite on ajoutera au moins l'option

[service]
WatchdogSec=30

Dans ce cas la valeur systemd_interval est ignorée et remplacée par la moitié de celle demandée par systemd.

Voila une bonne manière de surveiller son service et de laisser systemd prendre les mesures nécessaires (relance automatique du service, par exemple).

Il y en a encore qui préfèrent les vieux scripts SysV ?

Vus : 494
Publié par Remi Collet : 73