Cómo solucionar un servicio PHP-FPM atascado en Ubuntu (502 Bad Gateway)
Tu sitio Nginx está caído con un 502 Bad Gateway. Reinicias PHP-FPM y obtienes un error como Job for php8.3-fpm.service failed.... Aquí tienes la forma rápida y fiable de solucionarlo.
1) Encuentra el problema real
Cuando systemctl muestra un fallo como status=78, a menudo apunta a una configuración incorrecta. Empieza probando la configuración:
sudo php-fpm8.3 -tSi esto funciona pero el servicio aún no se inicia, comprueba los registros completos del servicio:
sudo journalctl -xeu php8.3-fpm.serviceBusca una línea de ERROR similar a:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sockEsto significa que un proceso PHP-FPM antiguo/bloqueado todavía está conectado al socket, impidiendo que la nueva instancia se inicie.
2) La solución: limpia el proceso antiguo
En los comandos siguientes, reemplaza /var/run/php/your-socket-name.sock con la ruta real del socket de tu registro de errores.
- Encuentra el proceso bloqueado (PID) - sudo lsof /var/run/php/your-socket-name.sock- Esto imprime el proceso que tiene el socket (probablemente ejecutándose como - root). Anota su PID.
- Detén ese proceso - # Reemplaza 12345 con el PID real sudo kill 12345- Si se niega a detenerse después de unos segundos, puedes forzar su cierre (úsalo con precaución): - sudo kill -9 12345
- Elimina el archivo de socket obsoleto - sudo rm /var/run/php/your-socket-name.sock- PHP-FPM lo recreará cuando se inicie. 
- Inicia PHP-FPM - sudo systemctl start php8.3-fpm- Tu servicio debería iniciarse ahora sin problemas. Verifica el estado: - systemctl status php8.3-fpm
3) Por qué ocurre esto
Si PHP-FPM falla o se interrumpe inesperadamente, puede dejar un proceso hijo en ejecución o un socket obsoleto. Systemd intenta iniciar un nuevo proceso maestro, pero el socket ya está ocupado.
4) Evítalo la próxima vez
- Reinicios elegantes: Prefiere systemctl reload php8.3-fpmpara cambios de configuración.
- Monitoriza los registros: Vigila /var/log/php8.3-fpm.log(o la ruta de tu distribución) para detectar fallos.
- Socket vs. puerto: Si sigues teniendo conflictos de sockets, considera usar TCP (127.0.0.1:9000) temporalmente mientras depuras.
Lista rápida para copiar y pegar
# 1) Comprueba la configuración
sudo php-fpm8.3 -t
# 2) Inspecciona los registros del servicio
sudo journalctl -xeu php8.3-fpm.service
# 3) Si el error es "already listen" -> libera el socket
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock
# 4) Inicia el servicio
sudo systemctl start php8.3-fpm
# 5) Verifica
systemctl status php8.3-fpm