So beheben Sie einen hängenden PHP-FPM-Dienst unter Ubuntu (502 Bad Gateway)
Ihre Nginx-Website ist mit einem 502 Bad Gateway ausgefallen. Sie starten PHP-FPM neu und erhalten eine Fehlermeldung wie Job for php8.3-fpm.service failed.... Hier ist der schnelle, zuverlässige Weg, wie ich das behebe.
1) Das eigentliche Problem finden
Wenn systemctl einen Fehler wie status=78 anzeigt, deutet dies oft auf eine fehlerhafte Konfiguration hin. Testen Sie zunächst die Konfiguration:
sudo php-fpm8.3 -tWenn dies erfolgreich ist, der Dienst aber immer noch nicht startet, überprüfen Sie die vollständigen Dienstprotokolle:
sudo journalctl -xeu php8.3-fpm.serviceSuchen Sie nach einer ERROR-Zeile ähnlich wie:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sockDas bedeutet, dass ein alter/hängengebliebener PHP-FPM-Prozess immer noch am Socket lauscht und die neue Instanz blockiert.
2) Die Lösung: Den alten Prozess bereinigen
Ersetzen Sie in den folgenden Befehlen /var/run/php/your-socket-name.sock durch den tatsächlichen Socket-Pfad aus Ihrem Fehlerprotokoll.
- Den hängengebliebenen Prozess (PID) finden - sudo lsof /var/run/php/your-socket-name.sock- Dies gibt den Prozess aus, der den Socket belegt (wahrscheinlich als - rootausgeführt). Notieren Sie sich seine PID.
- Diesen Prozess beenden - # Ersetzen Sie 12345 durch die tatsächliche PID sudo kill 12345- Wenn er sich nach einigen Sekunden nicht beenden lässt, können Sie ihn erzwingen (vorsichtig verwenden): - sudo kill -9 12345
- Die veraltete Socket-Datei entfernen - sudo rm /var/run/php/your-socket-name.sock- PHP-FPM wird sie beim Start neu erstellen. 
- PHP-FPM starten - sudo systemctl start php8.3-fpm- Ihr Dienst sollte nun sauber starten. Überprüfen Sie den Status: - systemctl status php8.3-fpm
3) Warum das passiert
Wenn PHP-FPM abstürzt oder unerwartet beendet wird, kann ein laufendes Kind oder ein veralteter Socket zurückbleiben. Systemd versucht, einen neuen Hauptprozess zu starten, aber der Socket ist bereits belegt.
4) Vorbeugung für die Zukunft
- Graceful Restarts: Bevorzugen Sie systemctl reload php8.3-fpmfür Konfigurationsänderungen.
- Protokolle überwachen: Überwachen Sie /var/log/php8.3-fpm.log(oder den Pfad Ihrer Distribution) auf Abstürze.
- Socket vs. Port: Wenn Sie immer wieder Socket-Konflikte haben, erwägen Sie vorübergehend TCP (127.0.0.1:9000), während Sie das Problem debuggen.
Schnelle Checkliste zum Kopieren und Einfügen
# 1) Konfiguration auf Plausibilität prüfen
sudo php-fpm8.3 -t
# 2) Dienstprotokolle inspizieren
sudo journalctl -xeu php8.3-fpm.service
# 3) Wenn die Fehlermeldung "already listen" auftritt -> Socket freigeben
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock
# 4) Dienst starten
sudo systemctl start php8.3-fpm
# 5) Überprüfen
systemctl status php8.3-fpm