Вопрос или проблема
Я устанавливал redis и столкнулся с ошибкой установки php8.3-fpm. Вот соответствующие сообщения об установке:
apt install redis-server
...
...
Настройка php8.3-fpm (8.3.6-0ubuntu0.24.04.2) ...
УВЕДОМЛЕНИЕ: PHP 8.3 FPM не включен по умолчанию.
УВЕДОМЛЕНИЕ: Чтобы включить PHP 8.3 FPM в Apache2, выполните:
УВЕДОМЛЕНИЕ: a2enmod proxy_fcgi setenvif
УВЕДОМЛЕНИЕ: a2enconf php8.3-fpm
УВЕДОМЛЕНИЕ: Вы видите это сообщение, потому что у вас установлен пакет apache2.
Задача для php8.3-fpm.service завершилась неудачей, так как было превышено время ожидания.
Смотрите "systemctl status php8.3-fpm.service" и "journalctl -xeu php8.3-fpm.service" для получения подробной информации.
invoke-rc.d: initscript php8.3-fpm, действие "перезапуск" завершилось неудачей.
× php8.3-fpm.service - Менеджер процессов FastCGI PHP 8.3
Загружен: загружен (/usr/lib/systemd/system/php8.3-fpm.service; включен; предустановлено: включен)
Активен: неактивен (Результат: тайм-аут) с Пн 2024-10-06 13:52:03 CEST; 16мс назад
Документы: man:php-fpm8.3(8)
Процесс: 285882 ExecStart=/usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf (код=вышел, статус=0/УСПЕХ)
Процесс: 285889 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.3/fpm/pool.d/www.conf 83 (код=вышел, статус=0/УСПЕХ)
Главный PID: 285882 (код=вышел, статус=0/УСПЕХ)
CPU: 90мс
06 окт 13:50:33 Ubuntu-2404-noble-amd64-base systemd[1]: Запуск php8.3-fpm.service - Менеджер процессов FastCGI PHP 8.3...
06 окт 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: операция запуска завершилась тайм-аутом. Завершение.
06 окт 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: Завершено с результатом 'тайм-аут'.
06 окт 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: Не удалось запустить php8.3-fpm.service - Менеджер процессов FastCGI PHP 8.3.
dpkg: ошибка при обработке пакета php8.3-fpm (--configure):
последний сценарий post-installation для установленного пакета php8.3-fpm завершился с кодом выхода 1
Настройка libjemalloc2:amd64 (5.3.0-2build1) ...
Настройка liblzf1:amd64 (3.6-4) ...
Настройка redis-tools (5:7.0.15-1build2) ...
Настройка redis-server (5:7.0.15-1build2) ...
Создан симлинк /etc/systemd/system/redis.service → /usr/lib/systemd/system/redis-server.service.
Создан симлинк /etc/systemd/system/multi-user.target.wants/redis-server.service → /usr/lib/systemd/system/redis-server.service.
Обработка триггеров для man-db (2.12.0-4build2) ...
Обработка триггеров для libc-bin (2.39-0ubuntu8.3) ...
Во время обработки возникли ошибки:
php8.3-fpm
needrestart пропускается, так как dpkg завершился с ошибкой
E: Подпроцесс /usr/bin/dpkg вернул код ошибки (1)
Сообщения systemctl и journalctl не особенно информативны – просто сообщают, что php8.3-fpm не удалось запустить с результатом ‘тайм-аут’.
Ошибка, похоже, связана с обработкой dpkg
php8.3-fpm
: последующий сценарий post-installation для установленного пакета php8.3-fpm завершился с кодом выхода 1
Содержимое /var/lib/dpkg/info/php8.3-fpm.postinst
:
#!/bin/sh
set -e
if [ -e /usr/share/apache2/apache2-maintscript-helper ]; then
. /usr/share/apache2/apache2-maintscript-helper
php_enable() {
# Не включать PHP FPM по умолчанию, когда установлен Apache 2
apache2_msg notice "УВЕДОМЛЕНИЕ: PHP 8.3 FPM не включен по умолчанию."
apache2_msg notice "УВЕДОМЛЕНИЕ: Чтобы включить PHP 8.3 FPM в Apache2, выполните:"
apache2_msg notice "УВЕДОМЛЕНИЕ: a2enmod proxy_fcgi setenvif"
apache2_msg notice "УВЕДОМЛЕНИЕ: a2enconf php8.3-fpm"
apache2_msg notice "УВЕДОМЛЕНИЕ: Вы видите это сообщение, потому что у вас установлен пакет apache2."
return 1
}
else
php_enable() {
# Не включать PHP FPM по умолчанию, когда Apache 2 не установлен
return 1
}
fi
if [ "$1" = "triggered" ] && [ "$2" = "/etc/php/8.3/fpm/conf.d" ]; then
invoke-rc.d php8.3-fpm restart
fi
CONFDIR=/etc/php/8.3/fpm/conf.d
if [ "$1" = "configure" ]; then
phpini="/etc/php/8.3/fpm/php.ini"
if [ "fpm" = "cli" ]; then
ucf /usr/lib/php/8.3/php.ini-production.fpm $phpini
else
ucf /usr/lib/php/8.3/php.ini-production $phpini
fi
ucfr php8.3-fpm $phpini
if [ -e /usr/lib/php/php-maintscript-helper ]; then
. /usr/lib/php/php-maintscript-helper
mods=$(phpquery -M -v 8.3)
for mod in $mods; do
php_invoke enmod 8.3 fpm $mod
done
fi
if [ -n "$2" ] && dpkg --compare-versions "$2" lt "7.0.3-2~"; then
rm -f /etc/php/8.3/fpm/conf.d/20-opcache.ini;
fi
fi
# Автоматически добавлено dh_apache2/UNDECLARED
if php_enable; then
if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then
. /usr/share/apache2/apache2-maintscript-helper
for conf in php8.3-fpm ; do
apache2_invoke enconf $conf || exit 1
done
fi
fi
# Конец автоматически добавленного раздела
# Автоматически добавлено dh_systemd_enable/13.14.1ubuntu5
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
# Следующая строка должна быть удалена в trixie или trixie+1
deb-systemd-helper unmask 'php8.3-fpm.service' >/dev/null || true
# was-enabled по умолчанию равно true, поэтому новые установки выполняют enable.
if deb-systemd-helper --quiet was-enabled 'php8.3-fpm.service'; then
# Включает юнит при первой установке, создает новые
# симлинки при обновлениях, если файл юнита изменился.
deb-systemd-helper enable 'php8.3-fpm.service' >/dev/null || true
else
# Обновляет состояние, чтобы добавить новые симлинки (если они есть), которые нужно
# очистить при очистке. Также удаляет старые симлинки.
deb-systemd-helper update-state 'php8.3-fpm.service' >/dev/null || true
fi
fi
# Конец автоматически добавленного раздела
# Автоматически добавлено dh_installinit/13.14.1ubuntu5
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if [ -x "$(command -v systemd-tmpfiles)" ]; then
systemd-tmpfiles ${DPKG_ROOT:+--root="$DPKG_ROOT"} --create php8.3-fpm.conf || true
fi
fi
# Конец автоматически добавленного раздела
# Автоматически добавлено dh_installdeb/13.14.1ubuntu5
dpkg-maintscript-helper rm_conffile /etc/init/php8.3-fpm.conf 7.4.3-4\~ php8.3-fpm -- "$@"
# Конец автоматически добавленного раздела
# Автоматически добавлено dh_installinit/13.14.1ubuntu5
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if [ -z "${DPKG_ROOT:-}" ] && [ -x "/etc/init.d/php8.3-fpm" ]; then
update-rc.d php8.3-fpm defaults >/dev/null
if [ -n "$2" ]; then
_dh_action=restart
else
_dh_action=start
fi
invoke-rc.d php8.3-fpm $_dh_action || exit 1
fi
fi
# Конец автоматически добавленного раздела
exit 0
Не знаком с работой dpkg, но exit 1
возникает в двух местах. Первый раз — при чтении конфигурационных файлов apache. Я удалил apache2, так что этот случай теперь не может вызвать ошибку. Второй раз просто сигнализирует о том, что запуск/перезапуск не удался.
Есть ли советы, что может быть проблемой? Это кажется выше моего уровня навыков.
Дополнительная информация: выполнение systemctl status php8.3-fpm.service
возвращает
× php8.3-fpm.service - Менеджер процессов FastCGI PHP 8.3
Загружен: загружен (/usr/lib/systemd/system/php8.3-fpm.service; включен; предустановлено: включен)
Активен: неактивен (Результат: тайм-аут) с Пн 2024-10-07 11:34:21 CEST; 1мин 33с назад
Документы: man:php-fpm8.3(8)
Процесс: 334032 ExecStart=/usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf (код=вышел, статус=0/УСПЕХ)
Процесс: 334035 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.3/fpm/pool.d/www.conf 83 (код=вышел, статус=0/УСПЕХ)
Главный PID: 334032 (код=вышел, статус=0/УСПЕХ)
CPU: 98мс
07 окт 11:32:51 Ubuntu-2404-noble-amd64-base systemd[1]: Запуск php8.3-fpm.service - Менеджер процессов FastCGI PHP 8.3...
07 окт 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: операция запуска завершилась тайм-аутом. Завершение.
07 окт 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: Завершено с результатом 'тайм-аут'.
07 окт 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: Не удалось запустить php8.3-fpm.service - Менеджер процессов FastCGI PHP 8.3.
Кроме того, если запустить службу вручную с помощью /usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf
, это вернет
УВЕДОМЛЕНИЕ: fpm работает, pid 334206
УВЕДОМЛЕНИЕ: готов обрабатывать соединения
УВЕДОМЛЕНИЕ: интервал мониторинга systemd установлен на 10000мс
... больше сообщений нет
что указывает на успешный запуск fpm, но, возможно, есть проблема с systemd? Я имею дело с несовпадающими номерами PID?
PHP-FPM установлен как служба типа notify
; это означает, что, цитируя systemd.service — Конфигурация юнита службы:
ожидается, что служба отправляет уведомление «READY=1» через sd_notify(3) или эквивалентный вызов, когда она завершит запуск
Согласно этой строке в вашем журнале:
не удалось уведомить статус systemd
что-то не так; это уведомление либо никогда не отправляется, либо никогда не доставляется.
Обходным путем для правильного запуска службы будет изменение типа службы на exec
, изменив файл /lib/systemd/system/php8.3-fpm.service
.
Чтобы сделать это, выполните:
sudo systemctl edit php8.3-fpm
Вы увидите закомментированную версию службы в редакторе (какой редактор будет зависеть от среды; по умолчанию в Ubuntu 24.04 это должен быть nano
).
Измените файл так, чтобы он выглядел следующим образом:
[Service]
Type=exec
Затем сохраните файл (в nano
: Ctrl + O / Enter / Ctrl + X).
Наконец, выполните:
sudo systemctl restart php8.3-fpm
Обратите внимание, что изменение /lib/systemd/system/php8.3-fpm.service
(в отличие от ручного редактирования) необходимо, потому что обновление PHP-FPM может изменить /lib/systemd/system/php8.3-fpm.service
, по сути отменив внесенные вами изменения.
Ответ или решение
Для решения проблемы с установкой php8.3-fpm, которая завершилась ошибкой, необходимо разобраться с ошибками, возникающими при запуске службы. Судя по предоставленным данным, основная проблема заключается в таймауте при запуске php8.3-fpm, что указывает на то, что служба не успевает сообщить системе о своем готовности к обработке запросов.
Сообщение о тайм-ауте может указывать на то, что php-fpm не отправляет уведомления о статусе, ожидаемые системой systemd. В соответствии с стандартами systemd, php-fpm должен отправить сообщение "READY=1" по завершении инициализации. Если это сообщение не отправляется, systemd считает, что служба не стартовала успешно.
Для обхода этой проблемы можно изменить тип службы php8.3-fpm на exec
, что упростит процесс запуска и позволит избежать ожидания уведомления. Вот шаги, которые вам нужно выполнить:
-
Создайте переопределение для службы php8.3-fpm:
Выполните следующую команду в терминале:
sudo systemctl edit php8.3-fpm
Это откроет текстовый редактор (обычно
nano
), где вы сможете внести изменения. -
Измените тип службы:
В открывшемся редакторе добавьте следующие строки:
[Service] Type=exec
Это изменит тип службы, что позволит избежать проблемы с таймаутом.
-
Сохраните изменения и выйдите из редактора:
- В
nano
: нажмитеCtrl + O
, затемEnter
для сохранения иCtrl + X
для выхода.
- В
-
Перезапустите службу php8.3-fpm:
Теперь выполните команду для перезапуска службы:
sudo systemctl restart php8.3-fpm
-
Проверьте статус службы:
После перезапуска проверьте статус, чтобы убедиться, что служба запущена успешно:
systemctl status php8.3-fpm.service
Если служба теперь работает без ошибок, то проблема была решена. Если же проблема остается, проверьте логи в journalctl
для получения дополнительных подсказок:
journalctl -xeu php8.3-fpm.service
Эта команда может предоставить более подробную информацию о том, что пошло не так при запуске службы. По результатам анализа логов можно будет предпринять дальнейшие шаги.
Если потребуется дополнительная помощь, не стесняйтесь задавать вопросы.