Volver al Blog

Cómo solucionar un servicio PHP-FPM atascado en Ubuntu (502 Bad Gateway)

2025-09-156 min read

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.

  1. 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.

  2. 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
  3. Elimina el archivo de socket obsoleto

    sudo rm /var/run/php/your-socket-name.sock

    PHP-FPM lo recreará cuando se inicie.

  4. 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