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 -tAls dit slaagt, maar de service nog steeds niet start, controleer dan de volledige servicelogs:
sudo journalctl -xeu php8.3-fpm.serviceZoek naar een ERROR-regel die lijkt op:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sockDit 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-fpmvoor 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