Как перезапустить php-fpm: команды и безопасный reload
Две одинаковые мензурки на изометрической подложке: левая почти пуста, правая полна, на её уровне лежит зелёный шарик

Как перезапустить php-fpm: команды и безопасный reload

Перезапустить php-fpm можно командой sudo systemctl restart php8.2-fpm, а на нагруженном сайте безопаснее reload. Разбираем команды и проверку.

Как перезапустить php-fpm без простоя и ошибок

Чтобы перезапустить php-fpm, выполните `sudo systemctl restart php8.2-fpm`, подставив версию PHP, установленную на сервере. Если сайт работает под нагрузкой, используйте `sudo systemctl reload php8.2-fpm`: он применит настройки и не оборвёт текущие запросы.

Правило на каждый день: сначала проверить конфигурацию, затем reload, и только если не помогло — restart.

Перезапуск php-fpm нужен после правок php.ini, изменения пулов, установки расширений и в случаях, когда процессы зависли и сайт отвечает ошибкой 502 или 504. В статье разобраны команды для разных систем и Docker, разница между restart и reload, безопасный порядок действий и проверка результата.

Что такое php-fpm и зачем его перезапускать

PHP-FPM (FastCGI Process Manager) — это менеджер процессов, который выполняет PHP-код для веб-сервера. Nginx или Apache принимает запрос браузера и передаёт его php-fpm через unix-сокет или TCP-порт. Там запрос обрабатывает один из рабочих процессов (воркеров), а готовый ответ возвращается обратно. Все WordPress, Laravel, Bitrix и другие PHP-сайты работают именно по такой схеме.

Воркеры живут долго и держат в памяти настройки, прочитанные при старте. Поэтому изменённый файл `php.ini` или конфигурация пула не вступают в силу сами. Службу нужно перезапустить или мягко перезагрузить, чтобы она перечитала конфигурацию.

Есть и вторая причина. Воркер, который завис на долгом запросе или вышел за лимит памяти, не освобождается сам. Если все слоты `pm.max_children` заняты, новые запросы встают в очередь, и посетители, а вместе с ними поисковые роботы Яндекса и Google получают 502 или 504.

Когда перезапуск php-fpm действительно нужен

  1. 01

    Вы изменили php.ini: memory_limit, upload_max_filesize, max_execution_time или часовой пояс.

  2. 02

    Вы поправили конфигурацию пула: pm.max_children, pm.start_servers, user, group или адрес listen.

  3. 03

    Установили или отключили расширение PHP: redis, imagick, intl, pdo_pgsql.

  4. 04

    Обновили PHP или пакеты и хотите убедиться, что работает новая версия.

  5. 05

    Сайт отдаёт 502 или 504, а в логах видно, что воркеры исчерпаны или зависли.

  6. 06

    Выложили новую версию кода при отключённой проверке времени изменения файлов в OPcache.

  7. 07

    Заметили рост потребления памяти: часть воркеров накопила утечки.

Как узнать точное имя службы php-fpm

Самая частая причина ошибки `Unit php-fpm.service not found` — неверное имя службы. В Debian и Ubuntu версия PHP входит в название: `php7.4-fpm`, `php8.1-fpm`, `php8.3-fpm`. В семействе CentOS, AlmaLinux и Rocky Linux служба чаще называется `php-fpm`, а при установке из репозитория Remi — например `php83-php-fpm`.

Чтобы не гадать, выведите список служб: `systemctl list-units --type=service | grep -i fpm`. Если на сервере установлено несколько версий PHP, вы увидите все. Перезапускать нужно ту, которую использует ваш сайт: её сокет указан в конфигурации nginx в директиве `fastcgi_pass`.

Все команды управления службами выполняются от имени root или через `sudo`. Без прав суперпользователя systemd попросит пароль или откажет в доступе.

шпаргалка · команды перезапуска
01

Ubuntu и Debian

sudo systemctl restart php8.2-fpm

Версия PHP входит в имя службы: php7.4-fpm, php8.1-fpm, php8.3-fpm.

02

CentOS, AlmaLinux, Rocky

sudo systemctl restart php-fpm

Для репозитория Remi имя может быть вида php83-php-fpm.

03

Плавная перезагрузка

sudo systemctl reload php8.2-fpm

Применяет настройки и не обрывает текущие запросы. Основной вариант для рабочего сайта.

04

Docker Compose

docker compose restart php

Здесь php — имя сервиса из compose-файла. Для мягкой перезагрузки: docker compose exec php kill -USR2 1.

Restart или reload: что выбрать

Разница между двумя командами принципиальна. Restart останавливает главный процесс php-fpm вместе с воркерами и запускает их заново. Пока служба поднимается, запросы, которые пришли в этот момент, получают ошибку, а выполнявшиеся скрипты прерываются. На небольшом сайте это пара секунд, но на магазине во время оформления заказа этого может хватить, чтобы потерять платёж или заказ.

Reload работает мягче. Служба получает сигнал `USR2`, перечитывает конфигурацию и постепенно заменяет воркеры на новые. Запросы, которые уже выполняются, завершаются штатно. В большинстве дистрибутивов юнит php-fpm настроен так, что `systemctl reload` отправляет именно этот сигнал.

Поэтому на рабочем проекте действуйте по принципу «минимально достаточного вмешательства». Менялись только настройки — делайте reload. Процессы зависли, обновили пакет PHP или reload не помог — тогда restart.

КомандаЧто происходитКогда использовать
systemctl reload php8.2-fpmМастер-процесс перечитывает конфигурацию и плавно заменяет воркерыПравки php.ini и пулов на рабочем сайте
systemctl restart php8.2-fpmСлужба полностью останавливается и запускается зановоЗависшие процессы, обновление пакета, смена версии PHP
systemctl stop + startТо же, что restart, но с паузой между остановкой и запускомОбслуживание, когда между остановкой и запуском нужно что-то сделать
kill -USR2 PIDРучная отправка сигнала главному процессу php-fpmКонтейнеры и окружения без systemd

Что происходит внутри при мягкой перезагрузке

Понимание механики помогает не бояться reload на боевом сервере. Главный процесс php-fpm не обрабатывает запросы сам, он только управляет воркерами. Получив сигнал, он аккуратно передаёт работу новым процессам, а старым даёт время закончить начатое.

Время ожидания ограничено директивой `process_control_timeout` в глобальной конфигурации. Если скрипт выполняется дольше, воркер будет остановлен принудительно. Для долгих задач, например генерации больших отчётов, это стоит учитывать.

таймлайн · reload php-fpm
  1. 01

    Мастер получает сигнал

    Команда systemctl reload отправляет главному процессу сигнал USR2.

  2. 02

    Читается новая конфигурация

    Проверяются php-fpm.conf, файлы пулов и php.ini. При ошибке в конфиге служба может не подняться, поэтому её нужно проверять заранее.

  3. 03

    Старые воркеры дорабатывают запросы

    Текущие запросы завершаются в пределах process_control_timeout.

  4. 04

    Новые воркеры принимают трафик

    Пул работает с обновлёнными настройками, а общий кэш OPcache начинается с чистого листа.

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

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

Как перезапустить php-fpm пошагово

  1. 01

    Посмотрите текущее состояние: `sudo systemctl status php8.2-fpm`. Убедитесь, что вы работаете с нужной версией PHP.

  2. 02

    Проверьте синтаксис конфигурации: `sudo php-fpm8.2 -t`. В CentOS и AlmaLinux команда выглядит как `php-fpm -t`. Вы должны увидеть сообщение, что проверка прошла успешно (test is successful).

  3. 03

    Выберите режим. Менялись только настройки — `sudo systemctl reload php8.2-fpm`. Процессы зависли или обновлён пакет — `sudo systemctl restart php8.2-fpm`.

  4. 04

    Убедитесь, что служба в состоянии active (running), а сокет на месте: `ls -l /run/php/`.

  5. 05

    Просмотрите последние строки журнала: `sudo journalctl -u php8.2-fpm -n 50 --no-pager`. Сообщения уровня ERROR и WARNING требуют внимания.

  6. 06

    Проверьте сам сайт: `curl -I https://ваш-сайт.ru` должен вернуть код 200 или ожидаемый 301, а не 502 и 504.

Если перезапуск связан с выкладкой нового кода, делайте его в период минимальной нагрузки. Узнать такое окно проще всего по отчётам посещаемости в Яндекс Метрике или Google Analytics: там видно часы, когда на сайте меньше всего людей.

Отдельно проверьте, не оборвались ли запросы с важными действиями: оплаты, отправки форм, загрузки файлов. Они чаще всего страдают при жёстком restart.

Типичные ошибки при перезапуске php-fpm

Большинство аварий после перезапуска случаются не из-за самой команды, а из-за пропущенной подготовки.

Как делать не надо

  • Выполнять restart сразу после правки конфигурации, не проверив её командой php-fpm -t.
  • Перезапускать службу в час пик на нагруженном магазине или сервисе с онлайн-оплатой.
  • Менять путь или права сокета и не обновлять fastcgi_pass в nginx.
  • Перезапускать nginx вместо php-fpm и удивляться, что настройки PHP не изменились.
  • Не заглядывать в журнал после перезапуска и узнавать о проблеме от клиентов.

Как правильно

  1. 01

    Всегда запускать php-fpm -t до применения изменений.

  2. 02

    Предпочитать reload, а restart оставлять для зависаний и обновлений.

  3. 03

    Выбирать окно с минимальной нагрузкой по статистике Метрики или Analytics.

  4. 04

    Сверять директиву listen в пуле с fastcgi_pass в nginx и права listen.owner и listen.group.

  5. 05

    После перезапуска смотреть systemctl status, журнал и код ответа сайта.

Как проверить, что сайт не пострадал

Успешный статус службы ещё не гарантия, что всё в порядке. Откройте несколько ключевых страниц сайта: главную, карточку товара или статью, корзину, страницу с формой. Убедитесь, что скрипты выполняются, а изображения и стили загружаются.

Для сайтов с поисковым трафиком полезно посмотреть и на реакцию поисковых систем. В Яндекс Вебмастере и Google Search Console следите за разделами с ошибками сервера. Кратковременный всплеск 5xx после перезапуска бывает, но если ошибки держатся, значит, пул не справляется или конфигурация неверна. Поисковые роботы, как Яндекса, так и Google, при частых 5xx снижают скорость обхода сайта, поэтому такие сбои лучше устранять сразу.

чек-лист · после перезапуска
  • Служба в состоянииactive (running)
  • Сокет или порт существует и доступен nginx
  • В журнале службы нет строкERROR
  • Главная и внутренние страницы отдают код200
  • В логе ошибок nginx нет 502 и 504
  • В Яндекс Вебмастере и Search Console нет роста 5xx

Что делать, если php-fpm не запускается или сайт отдаёт 502

Если после перезапуска `systemctl status` показывает `failed`, начните с журнала: `sudo journalctl -u php8.2-fpm -n 100 --no-pager`. Почти всегда причина указана прямо там.

Ошибка в конфигурации. Опечатка в имени директивы, лишний символ или дублирующийся пул. Выполните `php-fpm8.2 -t`: команда укажет файл и строку с проблемой.

Занят сокет или порт. Если сообщение говорит, что адрес уже используется, проверьте, не работает ли второй экземпляр php-fpm или другая версия PHP на том же сокете.

Нет прав на сокет. Служба запустилась, но nginx получает ошибку «Permission denied». Убедитесь, что значения `listen.owner` и `listen.group` в пуле совпадают с пользователем, под которым работает nginx (часто `www-data` или `nginx`).

Не совпадают пути. В логе nginx встречается строка вида `connect() to unix:/run/php/php8.2-fpm.sock failed (2: No such file or directory)`. Это значит, что `fastcgi_pass` указывает на сокет, которого нет, например после обновления версии PHP.

Нехватка воркеров. Служба работает, но периодически появляются 502 и 504, а в логе — предупреждение о достижении `pm.max_children`. Перезапуск лишь временно снимет симптом. Нужно увеличить лимит с учётом доступной памяти или оптимизировать медленные скрипты.

Перезапуск не лечит причину, а только сбрасывает состояние. Если php-fpm приходится перезапускать регулярно, ищите первопричину: утечки памяти, медленные запросы к базе данных, слишком низкий pm.max_children или нехватку ресурсов сервера.

Итоги: перезапускайте php-fpm осознанно

Проверить конфигурацию, применить reload, убедиться в результате — три шага, которые защищают сайт от простоя.
  1. 01

    Команда для Ubuntu и Debian: sudo systemctl restart php8.2-fpm, для CentOS и AlmaLinux: sudo systemctl restart php-fpm.

  2. 02

    Для рабочего сайта выбирайте reload: он не обрывает текущие запросы.

  3. 03

    Перед применением всегда выполняйте проверку конфигурации командой php-fpm -t.

  4. 04

    После перезапуска смотрите статус службы, журнал и код ответа сайта.

  5. 05

    Следите за ошибками 5xx в Яндекс Вебмастере и Google Search Console.

Сам по себе перезапуск php-fpm занимает секунды, но от подготовки зависит, пройдёт он незаметно или превратится в аварию. Если проблемы повторяются, пора заняться настройкой пулов, мониторингом и ресурсами сервера.

Часто задаваемые вопросы

Нужна помощь с настройкой сервера и php-fpm? Подключим специалиста

Проверим конфигурацию, пулы и логи, найдём причину 502 и настроим стабильную работу сайта

Бесплатная диагностикаОтвет в тот же деньБез простоя сайта

502 после перезапуска — частая причина обращений

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

Полученные сведения не передаются третьим лицам, за исключением случаев исполнения обязательств перед клиентом (с его разрешения) и обоснованных требований закона.

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.