PHP-FPM LinuxPHP 8.xNginx/Apache

PHP-FPM: пул не запускается после изменения listen.owner или listen.group

  • Обновлено
  • Чтение ≈ 5 минут
  • Нужны права администратора

Краткий ответ

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

В этой статье
  1. Симптомы и отличие от похожих неисправностей
  2. Диагностика и пошаговое устранение
  3. Как проверить результат и что предпринять при неуспехе

#Симптомы и отличие от похожих неисправностей

После изменения владельца Unix-сокета (listen.owner, listen.group) служба PHP-FPM не может поднять пул либо стартует с ошибкой. Важно отличить ошибку конфигурации и отсутствие пользователя от обычного Permission denied при работе сайта. В отличие от ошибки доступа Nginx к уже существующему сокету, здесь диагностика начинается со статуса службы и проверки файла пула: ошибка возникает во время запуска или перезагрузки PHP-FPM после правки владельца.

Возможная причинаКак узнатьЧто делать
Указанного владельца или группы нетВ директиве listen.owner или listen.group опечатка, пользователь был удалён при переносе сайта.Тест конфигурации сообщает об ошибке имени пользователя или группы; getent не находит объект.Проверить существование системной учётной записи и исправить опечатку.
В пуле применяются ACL вместо listen.ownerВключены listen.acl_users или listen.acl_groups, поэтому обычные параметры владельца игнорируются.Прочитанные значения отличаются от фактических прав сокета, ошибки могут быть не при старте, а при подключении.Проверить ACL и выбрать один поддерживаемый механизм.
Каталог сокета недоступен или конфликтует другой пулРодительский каталог недоступен, владельцы поменялись либо два пула используют один адрес.В журнале unable to bind listening socket, Permission denied для каталога или Address already in use.Проверить путь, права каталога и уникальность listen.

#Диагностика и пошаговое устранение

  1. Подключитесь и уточните, какая именно служба отказалаВ панели сервера откройте раздел служб и найдите PHP-FPM нужной версии. Без панели по SSH используйте стандартный терминал Windows/Linux и ssh пользователь@сервер. Выполните systemctl list-units --type=service --all "php*-fpm.service" и найдите имя вроде php8.2-fpm.service. Не запускайте все службы PHP подряд: убедитесь, что именно этот обработчик привязан к нужному сайту.
    Linux · Терминал (Bash)Команда
    Просмотр списка служб по SSH; права администратора не нужны. Если список пуст, сервис может иметь имя fp2-php85-fpm или быть запущен панелью иначе.
    systemctl list-units --type=service --all "php*-fpm.service"
  1. Посмотрите причину сбоя, а не только надпись failedПроверьте sudo systemctl status php8.2-fpm --no-pager и sudo journalctl -u php8.2-fpm -n 60 --no-pager (замените имя службы). Время записей сравните с моментом редактирования listen.owner. Выделите первую причину: unknown user, unknown group, failed to chown, unable to bind. Если таких записей нет, проверьте путь error_log в главном конфигурационном файле FPM: некоторые установки не передают эти строки в systemd.
    Linux · Терминал (Bash)КомандаНужен sudo
    Для Debian PHP 8.2; имя службы подставить фактическое. Только чтение; sudo требуется для полного доступа к журналу.
    sudo systemctl status php8.2-fpm --no-pager
    sudo journalctl -u php8.2-fpm -n 60 --no-pager
  1. Найдите файл пула, в котором изменены права сокетаВ панели домена откройте конфигурацию обработчика PHP или найдите у администратора путь к пулу. Для пакетной Debian-установки часто используется /etc/php/8.2/fpm/pool.d/, но у Fastpanel, стороннего PHP и контейнера он другой. Откройте файл в редакторе с правами администратора, выпишите listen, listen.owner, listen.group, listen.mode, а также listen.acl_users и listen.acl_groups. Запишите исходные значения и сохраните копию файла до любых правок.
  1. Проверьте системные имена без изменения учётных записейВ терминале сервера выполните getent passwd www-data и getent group www-data только если именно www-data указан в вашем файле; для других имён замените аргумент. Строка с данными подтверждает, что пользователь или группа существует; отсутствие вывода означает, что её нет в доступной базе учётных записей. Не создавайте автоматически нового пользователя только ради сокета — сначала выясните, кем должен владеть веб-сервер.
    Linux · Терминал (Bash)Команда
    Пример для системного пользователя/группы www-data; замените имена на те, что указаны в своём пуле. Просмотр без изменения системы.
    getent passwd www-data
    getent group www-data
  1. Проверьте родительский каталог и отсутствие конфликта адресовЕсли listen указывает на путь типа /run/php/example.sock, сначала проверьте ls -ld /run/php и namei -l /run/php/example.sock (для отсутствующего сокета увидите ошибку последнего сегмента — это ожидаемо). Затем сравните адреса listen нескольких пулов этой версии. Ваша цель — обеспечить выполнение поиска по родительским каталогам для управляющего процесса, а не раздать всем разрешения 777. При сообщении Address already in use ищите второй процесс с этим адресом, не удаляйте файл сокета работающего пула.
  1. Исправьте только неверные параметры и проверьте ACLЕсли найдено несуществующее имя, верните прежние корректные listen.owner и listen.group из резервной копии или установите подтверждённые имя и группу системного веб-сервера. Для Linux обычно применяют listen.mode = 0660; при заданных listen.acl_users/listen.acl_groups учтите, что owner/group игнорируются. Изменения в ACL согласуйте отдельно. Настройки user и group воркеров пула не заменяют разрешения сокета и не должны меняться заодно.
  2. Пример кода по теме
    INI
    Только пример при существующем www-data и соответствующем пути; не копируйте адрес в пул с другим сокетом.
    listen = /run/php/example.sock
    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
  1. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Только пример для PHP 8.2 на Debian: вторая команда выполняется после успешного теста и когда служба действительно не работает; restart прерывает текущие запросы. Команда перезагрузки выполняется только при успешной проверке конфигурации (оператор &&). При ошибке исправьте конфигурацию и повторите проверку; не запускайте перезагрузку вручную.
    sudo php-fpm8.2 -t && sudo systemctl restart php8.2-fpm

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  2. Проверяйте синтаксис до запуска или перезагрузкиПосле сохранения файла запустите тест нужного бинарника PHP-FPM: на Debian PHP 8.2 sudo php-fpm8.2 -t. При отрицательном результате запишите ошибку, восстановите конфигурацию из копии и повторите тест. Только успешный тест разрешает sudo systemctl restart php8.2-fpm для ранее упавшей службы. Для работающей службы предпочтительнее плавная перезагрузка reload; с другими версиями замените команды на соответствующие вашей установке.
  1. Проверьте создание сокета и отдельно запрос сайтаУбедитесь, что служба теперь active (running), файл сокета существует, а его собственник и группа соответствуют политике доступа. Через браузер откройте PHP-страницу сайта, затем проверьте журнал Nginx на отсутствие Permission denied при обращении к сокету. Если служба запускается, но выдаёт 502, это уже вопрос доступа Nginx или несовпадающего fastcgi_pass: не меняйте ещё раз владельца вслепую. При ухудшении верните резервный файл пула и повторите тест.

#Как проверить результат и что предпринять при неуспехе

Успех — конфигурация FPM проходит проверку, служба запускается, сокет создаётся с нужными правами и тестовый PHP-URL отвечает без 502. Если ошибка unknown user осталась, повторно проверьте имя и загрузку учётных записей; при Address already in use исследуйте второй пул. При откате восстановите копию исходных директив и запустите проверку синтаксиса.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.