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 -tSe questo comando viene eseguito correttamente ma il servizio non si avvia ancora, controlla i log completi del servizio:
sudo journalctl -xeu php8.3-fpm.serviceCerca una riga ERROR simile a:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sockCiò 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-fpmper 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