php-fpm: ошибка в описании пула и отказ запуска
php-fpm разбирает все файлы пулов при запуске. Ошибка в любом из них останавливает службу целиком: неизвестный параметр, несуществующий пользователь или каталог сокета, которого нет.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Неизвестный или неверно записанный параметр
Имена параметров пула строгие, а часть из них требует префикса
php_admin_value. Опечатка ломает разбор. -
Пользователь или группа пула не существуют
Параметры пула задают, от кого работают рабочие процессы. Несуществующее имя останавливает запуск.
-
Каталог для сокета не существует
Путь сокета указывает на каталог, который создаётся через
RuntimeDirectory=. Если путь другой, каталога может не быть.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Проверка всех файлов пулов: печатает файл и строку с ошибкой.
sudo php-fpm8.3 -tСообщение службы при отказе запуска.
journalctl -u php8.3-fpm -n 30 --no-pagerКакие пулы вообще есть: лишний файл тоже участвует в разборе.
ls -l /etc/php/8.3/fpm/pool.d/Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Имена параметров пула строгие, а часть из них требует префикса
php_admin_value. Опечатка ломает разбор.
- Как проверить
-
Запустите проверку настроек.
sudo php-fpm8.3 -t
- Как исправить
- Исправьте по сообщению проверки: она называет файл и строку.
- Почему происходит
- Параметры пула задают, от кого работают рабочие процессы. Несуществующее имя останавливает запуск.
- Как проверить
-
Посмотрите настройки и проверьте имена.
grep -E "^(user|group|listen.owner|listen.group)" /etc/php/8.3/fpm/pool.d/www.conf getent passwd www-data; getent group www-data
- Как исправить
- Приведите имена к существующим или создайте нужного пользователя.
- Почему происходит
- Путь сокета указывает на каталог, который создаётся через
RuntimeDirectory=. Если путь другой, каталога может не быть.
- Как проверить
-
Посмотрите путь сокета и каталог.
grep "^listen" /etc/php/8.3/fpm/pool.d/www.conf ls -ld /run/php 2>/dev/null
- Как исправить
- Используйте путь внутри каталога службы (/run/php) либо добавьте нужный каталог через переопределение unit-файла.
Пример вывода
Опечатка в имени параметра пула. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
Active: failed (Result: exit-code) since Mon 2026-09-15 14:02:10 MSK; 1s ago
php-fpm8.3[4200]: [ERROR] [pool www] cannot get uid for user 'www-dataa'
php-fpm8.3[4200]: [ERROR] failed to post process the configuration
systemd[1]: php8.3-fpm.service: Main process exited, code=exited, status=78/CONFIG
Связанные ошибки
- Коды 64–78 в systemd: набор sysexits Коды 64-78 из sysexits.h: USAGE, DATAERR, NOINPUT, UNAVAILABLE, SOFTWARE, OSERR, CONFIG и другие. Что означает каждый и где смотреть причину.
- status=217/USER в systemd Код 217/USER означает, что systemd не смог определить или сменить пользователя из User=. Разбор причин: пользователя нет, имя недопустимо, конфликт с DynamicUser.
- status=233/RUNTIME_DIRECTORY в systemd Код 233/RUNTIME_DIRECTORY: не удалось подготовить каталог службы в /run из RuntimeDirectory=. Права, режим, удаление при остановке.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Apache: правила .htaccess не действуют Файл .htaccess игнорируется: запрещён параметром AllowOverride, нет нужного модуля, файл не читается.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
- Docker: unable to configure the Docker daemon with file daemon.json Демон Docker не запускается из-за ошибки в /etc/docker/daemon.json: неверный JSON или неизвестный ключ.
Где встречается чаще всего
Источники
- Документация PHP: параметры пулов
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено несуществующим пользователем в описании пула.