Hoe een vastgelopen PHP-FPM-service op Ubuntu te repareren (502 Bad Gateway)
Uw Nginx-site is down met een 502 Bad Gateway. U start PHP-FPM opnieuw en krijgt een foutmelding zoals Job for php8.3-fpm.service failed.... Hier is de snelle, betrouwbare manier waarop ik het oplos.
1) Vind het echte probleem
Wanneer systemctl
een storing toont zoals status=78
, wijst dit vaak op een slechte configuratie. Begin met het testen van de configuratie:
sudo php-fpm8.3 -t
Als dit slaagt, maar de service nog steeds niet start, controleer dan de volledige servicelogs:
sudo journalctl -xeu php8.3-fpm.service
Zoek naar een ERROR-regel die lijkt op:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sock
Dit betekent dat een oud/vastgelopen PHP-FPM-proces nog steeds aan de socket is gebonden, wat de nieuwe instantie blokkeert.
2) De oplossing: ruim het oude proces op
Vervang in de onderstaande commando's /var/run/php/your-socket-name.sock
door het daadwerkelijke socketpad uit uw foutenlogboek.
Vind het vastgelopen proces (PID)
sudo lsof /var/run/php/your-socket-name.sock
Dit toont het proces dat de socket vasthoudt (waarschijnlijk draaiend als
root
). Noteer de PID.Stop dat proces
# Vervang 12345 door de daadwerkelijke PID sudo kill 12345
Als het na een paar seconden weigert te stoppen, kunt u het geforceerd beëindigen (gebruik met voorzichtigheid):
sudo kill -9 12345
Verwijder het verouderde socketbestand
sudo rm /var/run/php/your-socket-name.sock
PHP-FPM zal het opnieuw aanmaken wanneer het start.
Start PHP-FPM
sudo systemctl start php8.3-fpm
Uw service zou nu schoon moeten starten. Controleer de status:
systemctl status php8.3-fpm
3) Waarom dit gebeurt
Als PHP-FPM crasht of onverwacht wordt beëindigd, kan het een draaiend kindproces of een verouderde socket achterlaten. Systemd probeert een nieuw masterproces te starten, maar de socket is al in gebruik.
4) Voorkom het de volgende keer
- Graceful restarts: Gebruik bij voorkeur
systemctl reload php8.3-fpm
voor configuratiewijzigingen. - Houd logs in de gaten: Monitor
/var/log/php8.3-fpm.log
(of het pad van uw distributie) op crashes. - Socket versus poort: Als u steeds socketconflicten tegenkomt, overweeg dan tijdelijk TCP (127.0.0.1:9000) te gebruiken terwijl u debugt.
Snelle copy-paste checklist
# 1) Controleer de configuratie
sudo php-fpm8.3 -t
# 2) Inspecteer servicelogs
sudo journalctl -xeu php8.3-fpm.service
# 3) Als de fout "already listen" optreedt -> maak de socket vrij
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock
# 4) Start de service
sudo systemctl start php8.3-fpm
# 5) Verifieer
systemctl status php8.3-fpm