
PHP FPM управляет обработкой PHP-запросов и напрямую влияет на производительность веб-сервера. Неправильная перезагрузка может привести к падению сайтов или задержкам в обслуживании запросов, поэтому важно понимать конкретные команды и сценарии их применения.
На большинстве систем с systemd основной способ перезапуска PHP FPM – использование команды systemctl. Например, systemctl restart php8.1-fpm полностью останавливает и запускает службу, что очищает все текущие процессы и освобождает занятые ресурсы.
Если требуется минимальное вмешательство без разрыва активных соединений, стоит использовать reload: systemctl reload php8.1-fpm. Эта команда обновляет конфигурацию без остановки работающих процессов, что особенно полезно при изменении pool-конфигураций или параметров php.ini.
На серверах без systemd или с init.d допустимо применение скриптов: /etc/init.d/php8.1-fpm restart. Такой способ аналогичен systemctl restart, но требует проверки логов на предмет ошибок, так как init-сценарии иногда менее информативны.
Также стоит учитывать graceful-перезапуск через kill. Отправка сигнала SIGHUP основному процессу PHP FPM позволяет пересчитать конфигурацию без прерывания активных обработчиков запросов. Команда выглядит как kill -USR2 $(cat /run/php/php8.1-fpm.pid) и применима в критически нагруженных окружениях.
Перезапуск PHP FPM через systemctl на Ubuntu и Debian

Для управления PHP FPM на Ubuntu и Debian используется команда systemctl. Основные операции включают запуск, остановку, перезапуск и проверку статуса сервиса.
Чтобы перезапустить PHP FPM полностью и применить изменения в конфигурации, выполните команду:
sudo systemctl restart php8.1-fpm. Здесь php8.1-fpm соответствует версии PHP, установленной на сервере; замените её при необходимости.
Для мягкого перезапуска, который завершает текущие процессы PHP после обработки текущих запросов, используйте:
sudo systemctl reload php8.1-fpm. Этот способ предпочтителен на нагрузочных серверах, чтобы не прерывать активные сессии.
Для проверки состояния сервиса применяют команду:
sudo systemctl status php8.1-fpm. Она показывает активность демона, количество рабочих процессов и последние ошибки.
Для автоматической загрузки PHP FPM при старте системы выполните:
sudo systemctl enable php8.1-fpm. Для отключения автозагрузки используется disable вместо enable.
При внесении изменений в конфигурационные файлы, расположенные в /etc/php/8.1/fpm/, рекомендуется сначала проверить корректность синтаксиса через:
php-fpm8.1 -t. Ошибки конфигурации могут привести к неудачному запуску после перезапуска.
Если требуется остановить сервис полностью:
sudo systemctl stop php8.1-fpm. Для запуска после остановки используется start вместо stop.
Использование systemctl гарантирует корректное управление зависимостями и логированием PHP FPM, что предпочтительнее ручного завершения процессов через kill.
Использование service для рестарта PHP FPM на CentOS и RHEL
На CentOS и RHEL версии 6–7 команда service остаётся рабочим инструментом для управления сервисами, включая PHP FPM. Основная команда для перезапуска выглядит так: service php-fpm restart. Она завершает текущие процессы PHP FPM и запускает новые, применяя изменения в конфигурационных файлах.
Перед перезапуском рекомендуется проверить статус сервиса командой service php-fpm status. Это позволяет убедиться, что процессы работают корректно и отсутствуют ошибки в логах.
Для минимизации простоя можно использовать service php-fpm reload, которое применяет новые настройки без полной остановки процессов. Этот метод предпочтителен при внесении изменений в php.ini или www.conf.
Если сервис не запускается после перезапуска, необходимо проверить журналы ошибок: /var/log/php-fpm/error.log. Частые причины сбоев – неправильные права на сокеты, конфликты портов или ошибки в конфигурации пула.
Для систем с несколькими версиями PHP каждая версия имеет отдельный сервис, например, php74-php-fpm или php81-php-fpm. Перезапуск выполняется отдельно для каждой версии: service php74-php-fpm restart.
Автоматизацию перезапуска можно интегрировать в скрипты обновления конфигурации, используя проверку статуса до и после команды service php-fpm restart, чтобы гарантировать успешное применение изменений.
Перезапуск конкретного пула PHP FPM без остановки всего сервиса

Для минимизации простоев и изоляции проблемных процессов используется перезапуск отдельного пула PHP FPM. Это позволяет сохранить работу других сайтов и сервисов на сервере.
Основные шаги:
- Определить имя пула. Обычно конфигурация пула хранится в каталоге
/etc/php/<версия>/fpm/pool.d/в файлах с расширением.conf. Например, для пулаexampleфайлexample.conf. - Проверить текущий статус пула:
- Команда:
systemctl status php<версия>-fpmпокажет все активные процессы FPM. - Можно фильтровать процессы конкретного пула через
ps aux | grep php-fpmи искать нужныйpool. - Выполнить перезапуск только нужного пула:
- Сигнал для мягкого перезапуска процессов пула:
kill -USR2 $(cat /run/php/<версия>-fpm.<имя_пула>.pid) - Альтернатива через systemctl при поддержке отдельных сервисов пула:
systemctl reload php<версия>-fpm@<имя_пула> - Проверить логи пула после перезапуска для обнаружения ошибок:
/var/log/php-fpm/<имя_пула>.log. - При необходимости увеличить лимиты процессов или таймауты, редактировать соответствующие директивы в конфигурации пула:
pm.max_children– максимальное число дочерних процессовpm.start_servers,pm.min_spare_servers,pm.max_spare_servers– параметры управления количеством активных процессовrequest_terminate_timeout– таймаут завершения запроса- После внесения изменений выполнить мягкий перезапуск пула, чтобы новые настройки вступили в силу.
Таким образом, можно локализовать проблему на одном пуле, не влияя на остальные приложения и минимизируя время простоя.
Если хочешь, я могу дополнительно написать компактную таблицу с командами для разных версий PHP FPM для быстрого справочника.
Принудительное завершение процессов PHP FPM через kill
Для завершения конкретного процесса применяется kill -9 PID. Флаг -9 принудительно завершает процесс без возможности корректного завершения, что важно при зависших воркерах. Рекомендуется сначала использовать мягкий сигнал kill -15 PID, чтобы дать PHP FPM возможность корректно завершить текущие запросы.
Для массового завершения всех воркеров PHP FPM удобно применять команду pkill -9 php-fpm или killall -9 php-fpm, но мастер-процесс оставляют нетронутым, иначе служба полностью остановится.
После завершения процессов рекомендуется проверить состояние службы: systemctl status php-fpm или service php-fpm status. Если требуется полный перезапуск, мастер-процесс можно перезапустить отдельно через systemctl restart php-fpm.
Принудительное завершение через kill используется при зависании воркеров, превышении лимитов памяти или некорректной работе PHP скриптов. Использование сигналов следует документировать и избегать регулярного применения в продуктивной среде, чтобы не потерять данные текущих сессий.
Обновление конфигурации и плавный перезапуск PHP FPM

Для внесения изменений в конфигурацию PHP FPM без остановки сервиса рекомендуется использовать плавный перезапуск. Он позволяет применить новые параметры, сохранив активные процессы обработки запросов.
Основные шаги включают:
1. Проверка синтаксиса конфигурационных файлов:
php-fpm -t
Команда проверяет php-fpm.conf и все включенные пуловые файлы, предотвращая ошибки при перезапуске.
2. Применение новой конфигурации с плавным перезапуском:
systemctl reload php-fpm или service php-fpm reload
Эта команда сигнализирует мастер-процессу PHP FPM перечитать конфигурацию и плавно завершить старые рабочие процессы после обработки текущих запросов.
3. Контроль состояния после перезапуска:
| Команда | Назначение |
|---|---|
systemctl status php-fpm |
Проверка активных процессов и ошибок |
ps aux | grep php-fpm |
Отображение всех рабочих процессов PHP FPM |
tail -f /var/log/php-fpm/error.log |
Мониторинг логов на предмет критических ошибок после обновления конфигурации |
Рекомендуется перед перезапуском сохранять резервные копии файлов конфигурации пулов в формате *.conf.bak и проверять доступность портов, особенно при использовании нескольких версий PHP на одном сервере.
Для уменьшения времени простоя и предотвращения сбоев на высоконагруженных системах допустимо использовать параметр pm.max_requests для постепенного завершения процессов после определённого числа обработанных запросов.
Таким образом, последовательность проверки, плавного перезапуска и мониторинга обеспечивает стабильное применение изменений конфигурации PHP FPM без остановки обслуживания пользователей.
Проверка статуса PHP FPM перед и после перезапуска

Также рекомендуется проверить логи ошибок PHP FPM, обычно расположенные в /var/log/php-fpm/error.log. Это позволяет выявить критические ошибки, которые могут повлиять на корректный перезапуск.
После выполнения перезапуска командой systemctl restart php-fpm или service php-fpm restart повторно проверьте статус сервиса. Убедитесь, что Active: отображается как active (running), а Main PID: изменился, что подтверждает успешный перезапуск.
Для дополнительной проверки можно выполнить php-fpm -t, чтобы убедиться, что конфигурационные файлы валидны и не приведут к сбоям при старте. Мониторинг времени отклика через curl -I http://localhost после перезапуска даст точную оценку работоспособности PHP FPM на сервере.
Автоматизация перезапуска PHP FPM через скрипты и cron

Для минимизации простоев и оперативного реагирования на ошибки PHP FPM можно настроить автоматический перезапуск с помощью скриптов и cron. Ниже представлен пошаговый подход с конкретными рекомендациями.
- Создание скрипта перезапуска
- Создайте скрипт, например,
/usr/local/bin/restart_phpfpm.sh. - Содержание скрипта для систем с systemd:
#!/bin/bash systemctl is-active --quiet php8.1-fpm if [ $? -ne 0 ]; then systemctl restart php8.1-fpm echo "$(date '+%Y-%m-%d %H:%M:%S') - PHP FPM перезапущен" >> /var/log/phpfpm_restart.log fi - Дайте скрипту права на выполнение:
chmod +x /usr/local/bin/restart_phpfpm.sh. - Используйте точную версию PHP, установленную на сервере (php7.4-fpm, php8.2-fpm и т.д.).
- Создайте скрипт, например,
- Настройка cron для регулярного мониторинга
- Откройте crontab от имени пользователя root:
crontab -e. - Добавьте задачу для проверки состояния каждые 5 минут:
*/5 * * * * /usr/local/bin/restart_phpfpm.sh - Для уменьшения нагрузки на сервер можно увеличить интервал до 10–15 минут, если PHP FPM стабилен.
- Откройте crontab от имени пользователя root:
- Логирование и уведомления
- Логирование позволяет отслеживать частоту перезапусков. Файл
/var/log/phpfpm_restart.logхранит дату и время каждого события. - При необходимости можно добавить отправку уведомлений на email:
systemctl restart php8.1-fpm && echo "PHP FPM перезапущен $(date)" | mail -s "PHP FPM Restart" admin@example.com
- Логирование позволяет отслеживать частоту перезапусков. Файл
- Оптимизация скрипта
- Можно использовать команду
systemctl reload php8.1-fpmвместо полного перезапуска для снижения времени простоя. - Для больших проектов добавьте проверку нагрузки или ошибок логов перед перезапуском, например, проверяя
/var/log/php8.1-fpm.logна критические ошибки. - Используйте встроенные инструменты мониторинга, например,
monit, чтобы автоматизировать проверку и перезапуск без cron.
- Можно использовать команду
Вопрос-ответ:
Какая команда используется для перезапуска PHP FPM на сервере с systemd?
Для серверов с systemd обычно применяют команду `systemctl restart php-fpm` или с указанием версии, например `systemctl restart php7.4-fpm`. Эта команда останавливает текущий процесс PHP FPM и сразу запускает его заново, применяя любые изменения в конфигурации.
Можно ли перезапустить PHP FPM без полной остановки процессов?
Да, есть команда `systemctl reload php-fpm`, которая перезагружает конфигурацию без остановки активных процессов. Это полезно, если нужно применить изменения конфигурационных файлов, не прерывая работу сайтов и сервисов, использующих PHP.
Какие ошибки могут возникнуть при перезапуске PHP FPM?
Наиболее распространённые ошибки связаны с неверной конфигурацией, например, синтаксическими ошибками в `www.conf` или других файлах. В таких случаях при запуске появится сообщение об ошибке, и сервис не запустится. Проверить конфигурацию можно командой `php-fpm -t`, которая покажет, есть ли ошибки.
Есть ли разница между командами `restart` и `reload` для PHP FPM?
Да, команда `restart` полностью останавливает сервис и запускает его заново, что приводит к кратковременной недоступности PHP. Команда `reload` только перечитывает конфигурацию, не прерывая активные процессы. Выбор зависит от того, нужно ли применить новые настройки без остановки сайтов или требуется полная перезагрузка сервисов.
