Zurück zum Blog

So beheben Sie einen hängenden PHP-FPM-Dienst unter Ubuntu (502 Bad Gateway)

2025-09-156 min read

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 -t

Wenn dies erfolgreich ist, der Dienst aber immer noch nicht startet, überprüfen Sie die vollständigen Dienstprotokolle:

sudo journalctl -xeu php8.3-fpm.service

Suchen Sie nach einer ERROR-Zeile ähnlich wie:

ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sock

Das 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.

  1. 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 root ausgeführt). Notieren Sie sich seine PID.

  2. 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
  3. Die veraltete Socket-Datei entfernen

    sudo rm /var/run/php/your-socket-name.sock

    PHP-FPM wird sie beim Start neu erstellen.

  4. 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-fpm fü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