Назад к блогу

Как исправить зависшую службу PHP-FPM на Ubuntu (502 Bad Gateway)

2025-09-156 min read

Ваш сайт Nginx недоступен с ошибкой 502 Bad Gateway. Вы перезапускаете PHP-FPM и получаете ошибку вроде Job for php8.3-fpm.service failed.... Вот быстрый и надежный способ, которым я это исправляю.

1) Найдите настоящую проблему

Когда systemctl показывает сбой, такой как status=78, это часто указывает на плохую конфигурацию. Начните с проверки конфигурации:

sudo php-fpm8.3 -t

Если это проходит, но служба все равно не запускается, проверьте полные журналы службы:

sudo journalctl -xeu php8.3-fpm.service

Ищите строку ERROR, похожую на:

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

Это означает, что старый/зависший процесс PHP-FPM все еще прослушивает сокет, блокируя новый экземпляр.

2) Исправление: очистка старого процесса

В командах ниже замените /var/run/php/your-socket-name.sock на фактический путь к сокету из вашего журнала ошибок.

  1. Найдите зависший процесс (PID)

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

    Это выведет процесс, удерживающий сокет (вероятно, запущенный от имени root). Запишите его PID.

  2. Остановите этот процесс

    # Замените 12345 на фактический PID
    sudo kill 12345

    Если он отказывается завершиться через несколько секунд, вы можете принудительно завершить его (используйте с осторожностью):

    sudo kill -9 12345
  3. Удалите устаревший файл сокета

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

    PHP-FPM воссоздаст его при запуске.

  4. Запустите PHP-FPM

    sudo systemctl start php8.3-fpm

    Теперь ваша служба должна запуститься без проблем. Проверьте статус:

    systemctl status php8.3-fpm

3) Почему это происходит

Если PHP-FPM аварийно завершает работу или неожиданно завершается, он может оставить за собой работающий дочерний процесс или устаревший сокет. Systemd пытается запустить новый мастер-процесс, но сокет уже занят.

4) Предотвратите это в будущем

  • Корректные перезапуски: Предпочитайте systemctl reload php8.3-fpm для изменений конфигурации.
  • Отслеживайте журналы: Следите за /var/log/php8.3-fpm.log (или путем вашей дистрибуции) на предмет сбоев.
  • Сокет против порта: Если вы постоянно сталкиваетесь с конфликтами сокетов, рассмотрите временно использование TCP (127.0.0.1:9000) во время отладки.

Быстрый чек-лист для копирования и вставки

# 1) Проверка конфигурации
sudo php-fpm8.3 -t

# 2) Анализ журналов службы
sudo journalctl -xeu php8.3-fpm.service

# 3) Если ошибка "already listen" -> освободите сокет
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock

# 4) Запуск службы
sudo systemctl start php8.3-fpm

# 5) Проверка
systemctl status php8.3-fpm