Come risolvere un servizio PHP-FPM bloccato su Ubuntu (502 Bad Gateway)
Il tuo sito Nginx è offline con un 502 Bad Gateway. Riavvi PHP-FPM e ottieni un errore come Job for php8.3-fpm.service failed.... Ecco il modo rapido e affidabile per risolverlo.
1) Trova il vero problema
Quando systemctl
mostra un errore come status=78
, spesso indica una configurazione errata. Inizia testando la configurazione:
sudo php-fpm8.3 -t
Se questo comando viene eseguito correttamente ma il servizio non si avvia ancora, controlla i log completi del servizio:
sudo journalctl -xeu php8.3-fpm.service
Cerca una riga ERROR simile a:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sock
Ciò significa che un processo PHP-FPM vecchio/bloccato è ancora collegato al socket, impedendo l'avvio della nuova istanza.
2) La soluzione: elimina il vecchio processo
Nei comandi seguenti, sostituisci /var/run/php/your-socket-name.sock
con il percorso effettivo del socket dal tuo log degli errori.
Trova il processo bloccato (PID)
sudo lsof /var/run/php/your-socket-name.sock
Questo comando stampa il processo che detiene il socket (probabilmente in esecuzione come
root
). Annota il suo PID.Interrompi quel processo
# Sostituisci 12345 con il PID effettivo sudo kill 12345
Se non si arresta dopo qualche secondo, puoi forzarne l'interruzione (usare con cautela):
sudo kill -9 12345
Rimuovi il file socket obsoleto
sudo rm /var/run/php/your-socket-name.sock
PHP-FPM lo ricreerà all'avvio.
Avvia PHP-FPM
sudo systemctl start php8.3-fpm
Il tuo servizio dovrebbe ora avviarsi correttamente. Verifica lo stato:
systemctl status php8.3-fpm
3) Perché succede
Se PHP-FPM si arresta in modo anomalo o viene interrotto inaspettatamente, può lasciare un processo figlio in esecuzione o un socket obsoleto. Systemd tenta di avviare un nuovo processo master, ma il socket è già occupato.
4) Prevenire la prossima volta
- Riavvii graziosi: Preferisci
systemctl reload php8.3-fpm
per le modifiche alla configurazione. - Monitora i log: Tieni d'occhio
/var/log/php8.3-fpm.log
(o il percorso della tua distribuzione) per eventuali crash. - Socket vs. porta: Se continui a riscontrare conflitti di socket, considera temporaneamente l'uso di TCP (127.0.0.1:9000) mentre esegui il debug.
Checklist rapida copia-incolla
# 1) Verifica la configurazione
sudo php-fpm8.3 -t
# 2) Ispeziona i log del servizio
sudo journalctl -xeu php8.3-fpm.service
# 3) Se l'errore "already listen" -> libera il socket
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock
# 4) Avvia il servizio
sudo systemctl start php8.3-fpm
# 5) Verifica
systemctl status php8.3-fpm