Comment corriger un service PHP-FPM bloqué sur Ubuntu (502 Bad Gateway)
Votre site Nginx est hors service avec une erreur 502 Bad Gateway. Vous redémarrez PHP-FPM et obtenez une erreur telle que Job for php8.3-fpm.service failed.... Voici la méthode rapide et fiable que j'utilise pour résoudre ce problème.
1) Trouver le vrai problème
Lorsque systemctl
affiche un échec comme status=78
, cela indique souvent une mauvaise configuration. Commencez par tester la configuration :
sudo php-fpm8.3 -t
Si cela fonctionne mais que le service ne démarre toujours pas, vérifiez les journaux complets du service :
sudo journalctl -xeu php8.3-fpm.service
Recherchez une ligne ERROR similaire à :
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sock
Cela signifie qu'un ancien processus PHP-FPM bloqué écoute toujours sur le socket, empêchant la nouvelle instance de démarrer.
2) La solution : libérer l'ancien processus
Dans les commandes ci-dessous, remplacez /var/run/php/your-socket-name.sock
par le chemin réel du socket indiqué dans votre journal d'erreurs.
Trouver le processus bloqué (PID)
sudo lsof /var/run/php/your-socket-name.sock
Ceci affiche le processus qui détient le socket (probablement exécuté en tant que
root
). Notez son PID.Arrêter ce processus
# Remplacez 12345 par le PID réel sudo kill 12345
S'il refuse de s'arrêter après quelques secondes, vous pouvez le forcer (à utiliser avec prudence) :
sudo kill -9 12345
Supprimer le fichier de socket obsolète
sudo rm /var/run/php/your-socket-name.sock
PHP-FPM le recréera lors de son démarrage.
Démarrer PHP-FPM
sudo systemctl start php8.3-fpm
Votre service devrait maintenant démarrer correctement. Vérifiez son statut :
systemctl status php8.3-fpm
3) Pourquoi cela se produit
Si PHP-FPM plante ou est arrêté de manière inattendue, il peut laisser derrière lui un processus enfant actif ou un socket obsolète. Systemd tente de démarrer un nouveau processus maître, mais le socket est déjà occupé.
4) Prévenir la prochaine fois
- Redémarrages gracieux : Préférez
systemctl reload php8.3-fpm
pour les modifications de configuration. - Surveiller les journaux : Gardez un œil sur
/var/log/php8.3-fpm.log
(ou le chemin de votre distribution) pour les plantages. - Socket vs port : Si vous rencontrez constamment des conflits de socket, envisagez d'utiliser TCP (127.0.0.1:9000) temporairement pendant que vous déboguez.
Liste de contrôle rapide à copier-coller
# 1) Vérification de la configuration
sudo php-fpm8.3 -t
# 2) Inspection des journaux du service
sudo journalctl -xeu php8.3-fpm.service
# 3) Si erreur "already listen" -> libérer le socket
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock
# 4) Démarrer le service
sudo systemctl start php8.3-fpm
# 5) Vérifier
systemctl status php8.3-fpm