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 -t
Si esto funciona pero el servicio aún no se inicia, comprueba los registros completos del servicio:
sudo journalctl -xeu php8.3-fpm.service
Busca una línea de ERROR similar a:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sock
Esto 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-fpm
para 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