#Что происходит и когда применима инструкция
После обновления пакетов PHP-FPM может перестать стартовать из-за изменившейся версии бинарного файла, некорректной директивы pool.d, занятого сокета или невозможности загрузить расширение. Сначала нужно обнаружить первичную ошибку, не переустанавливая PHP поверх работающих сайтов.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Конфигурация несовместима с новой версиейКонфигурация несовместима с новой версией. Тест -t выдаёт неизвестный параметр или строку pool.d. | Тест -t выдаёт неизвестный параметр или строку pool.d. | Сравнить директиву с руководством установленной версии. |
| Изменилось имя службы или установлен другой экземплярИзменилось имя службы или установлен другой экземпляр. Сайт указывает на старый Unix-сокет, новая служба активна под другим именем. | Сайт указывает на старый Unix-сокет, новая служба активна под другим именем. | Сверить имя systemd, сокеты и fastcgi_pass. |
| Сбой загрузки расширения или доступа к файламСбой загрузки расширения или доступа к файлам. В journalctl появляется ошибка .so или Permission denied. | В journalctl появляется ошибка .so или Permission denied. | Проверить расширения и конкретные права. |
#Подробная пошаговая инструкция
- Снимите первичное сообщение об ошибке сразу после обновленияВ SSH проверьте, какой пакет обновлялся и какая FPM-служба перестала работать. Не выполняйте apt autoremove и не удаляйте каталоги конфигурации до резервной копии. Посмотрите состояние служб; успешная работа соседней версии не доказывает работу нужного пула.
- SSH на Linux с systemd, пример службы php8.2-fpmLinux · Терминал (Bash)КомандаНужен sudoSSH на Linux с systemd, пример службы php8.2-fpm. Журнал только читается; запишите первую ошибку, возникшую после обновления.
systemctl --type=service --all | grep -E "php.*fpm|php-fpm"; sudo journalctl -u php8.2-fpm -n 100 --no-pager
- Проверьте конфигурацию именно нового FPMВыполните бинарный файл новой версии с -t. Если он отсутствует, проверьте список установленных пакетов средствами своего дистрибутива. Нельзя считать php -v доказательством наличия php-fpm этой версии.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаНужен sudoSSH, Debian/Ubuntu PHP 8.2 как пример; третья команда проверяет FPM-конфигурацию с правами администратора. При другой версии заменить имя программы.
php -v; command -v php-fpm8.2; sudo php-fpm8.2 -t
- Устраните конкретную ошибку, а не переписывайте всёЕсли тест назвал строку и параметр, сохраните изменяемый pool.d и исправьте только его. Если ошибка связана с расширением, проверьте его совместимость с новой версией и способ установки через штатный пакетный менеджер; не скачивайте произвольные бинарные модули с форумов.
- Сверьте порт или сокет, включая права каталога /runЕсли тест проходит, но процесс не стартует, используйте системный журнал и список слушателей. Убедитесь, что старый PHP не занял тот же TCP-порт или путь сокета. Не удаляйте чужой работающий сокет командой rm и не выставляйте FastCGI наружу.
- SSH, администратор, только чтение TCP и Unix-сокетовLinux · Терминал (Bash)КомандаНужен sudoSSH, администратор, только чтение TCP и Unix-сокетов. Если сокет не появился, возвращайтесь к ошибке запуска процесса.
sudo ss -ltnp; sudo ss -lxnp | grep -E "php|fpm"
- Проверьте привязку к сайту и примените восстановлениеПосле успешного -t запустите только нужную FPM-службу в согласованное окно. Проверьте systemctl is-active и один безвредный PHP-запрос. Если 502 сохраняется, сравните fastcgi_pass с новой точкой listen; не меняйте его глобально для всех сайтов.Linux · Терминал (Bash)С осторожностьюНужен sudoSSH, администратор, пример установленной версии. restart прерывает обслуживаемые запросы, поэтому только после проверки конфигурации.
sudo systemctl restart php8.2-fpm && systemctl is-active php8.2-fpmКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Выполните регрессионную проверкуОткройте главную страницу, форму входа и одну внутреннюю страницу с PHP. Посмотрите лог ошибок несколько минут; восстановите исходную версию или копию настройки по проверенному плану отката, если новый PHP вызывает несовместимость приложения.
#Как проверить, что проблема исправлена
Служба active, test -t успешен, FPM слушает нужный адрес, PHP-страницы отвечают без 502/500 и критических предупреждений расширений.
#Если не помогло — дальнейшая диагностика и откат
Если обновление оборвалось, проверьте журнал пакетного менеджера и состояние пакетов, затем следуйте процедуре вашего дистрибутива; не запускайте восстановление базы данных и не очищайте автоматически зависимости.