我正在安装 redis,遇到 php8.3-fpm 安装错误。以下是相关的安装消息:
apt install redis-server
...
...
Setting up php8.3-fpm (8.3.6-0ubuntu0.24.04.2) ...
NOTICE: Not enabling PHP 8.3 FPM by default.
NOTICE: To enable PHP 8.3 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.3-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Job for php8.3-fpm.service failed because a timeout was exceeded.
See "systemctl status php8.3-fpm.service" and "journalctl -xeu php8.3-fpm.service" for details.
invoke-rc.d: initscript php8.3-fpm, action "restart" failed.
× php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
Active: failed (Result: timeout) since Sun 2024-10-06 13:52:03 CEST; 16ms ago
Docs: man:php-fpm8.3(8)
Process: 285882 ExecStart=/usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf (code=exited, status=0/SUCCESS)
Process: 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 (code=exited, status=0/SUCCESS)
Main PID: 285882 (code=exited, status=0/SUCCESS)
CPU: 90ms
Oct 06 13:50:33 Ubuntu-2404-noble-amd64-base systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager...
Oct 06 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: start operation timed out. Terminating.
Oct 06 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: Failed with result 'timeout'.
Oct 06 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: Failed to start php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager.
dpkg: error processing package php8.3-fpm (--configure):
installed php8.3-fpm package post-installation script subprocess returned error exit status 1
Setting up libjemalloc2:amd64 (5.3.0-2build1) ...
Setting up liblzf1:amd64 (3.6-4) ...
Setting up redis-tools (5:7.0.15-1build2) ...
Setting up redis-server (5:7.0.15-1build2) ...
Created symlink /etc/systemd/system/redis.service → /usr/lib/systemd/system/redis-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service → /usr/lib/systemd/system/redis-server.service.
Processing triggers for man-db (2.12.0-4build2) ...
Processing triggers for libc-bin (2.39-0ubuntu8.3) ...
Errors were encountered while processing:
php8.3-fpm
needrestart is being skipped since dpkg has failed
E: Sub-process /usr/bin/dpkg returned an error code (1)
Systemctl 和 yournalctl 消息并不是特别具有描述性 - 只是说 php8.3-fpm 无法启动,结果为“超时”。
错误似乎出在dpkg
处理上php8.3-fpm
:installed php8.3-fpm package post-installation script subprocess returned error exit status 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() {
# Don't enable PHP FPM by default when Apache 2 is installed
apache2_msg notice "NOTICE: Not enabling PHP 8.3 FPM by default."
apache2_msg notice "NOTICE: To enable PHP 8.3 FPM in Apache2 do:"
apache2_msg notice "NOTICE: a2enmod proxy_fcgi setenvif"
apache2_msg notice "NOTICE: a2enconf php8.3-fpm"
apache2_msg notice "NOTICE: You are seeing this message because you have apache2 package installed."
return 1
}
else
php_enable() {
# Don't enable PHP FPM by default when Apache 2 is not installed
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
# Automatically added by 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
# End automatically added section
# Automatically added by dh_systemd_enable/13.14.1ubuntu5
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
# The following line should be removed in trixie or trixie+1
deb-systemd-helper unmask 'php8.3-fpm.service' >/dev/null || true
# was-enabled defaults to true, so new installations run enable.
if deb-systemd-helper --quiet was-enabled 'php8.3-fpm.service'; then
# Enables the unit on first installation, creates new
# symlinks on upgrades if the unit file has changed.
deb-systemd-helper enable 'php8.3-fpm.service' >/dev/null || true
else
# Update the statefile to add new symlinks (if any), which need to be
# cleaned up on purge. Also remove old symlinks.
deb-systemd-helper update-state 'php8.3-fpm.service' >/dev/null || true
fi
fi
# End automatically added section
# Automatically added by 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
# End automatically added section
# Automatically added by dh_installdeb/13.14.1ubuntu5
dpkg-maintscript-helper rm_conffile /etc/init/php8.3-fpm.conf 7.4.3-4\~ php8.3-fpm -- "$@"
# End automatically added section
# Automatically added by 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
# End automatically added section
exit 0
不熟悉 dpkg 的功能,但exit 1
会出现在两个位置。第一个出现在读取 apache conf 文件时。我已删除 apache2,因此这个不再会触发。第二个只是表示启动/重启失败。
有什么提示可以说明问题所在吗?这似乎超出了我的技能水平。
附加信息:运行systemctl status php8.3-fpm.service
回报
× php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
Active: failed (Result: timeout) since Mon 2024-10-07 11:34:21 CEST; 1min 33s ago
Docs: man:php-fpm8.3(8)
Process: 334032 ExecStart=/usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf (code=exited, status=0/SUCCESS)
Process: 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 (code=exited, status=0/SUCCESS)
Main PID: 334032 (code=exited, status=0/SUCCESS)
CPU: 98ms
Oct 07 11:32:51 Ubuntu-2404-noble-amd64-base systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager...
Oct 07 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: start operation timed out. Terminating.
Oct 07 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: Failed with result 'timeout'.
Oct 07 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: Failed to start php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager.
此外,手动启动服务并/usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf
返回
NOTICE: fpm is running, pid 334206
NOTICE: ready to handle connections
NOTICE: systemd monitor interval set to 10000ms
... no more messages
表示 fpm 已成功启动,但 systemd 可能存在问题?我是否遇到了不匹配的 PID 编号?
PHP-FPM 作为服务类型安装
notify
;这意味着,引用systemd.service — 服务单元配置:根据日志文件中的这一行:
出现问题了;该通知要么从未发送,要么从未送达。
使服务正常启动的解决方法是
exec
通过覆盖/lib/systemd/system/php8.3-fpm.service
将服务类型更改为。为了做到这一点,请运行:
您将在编辑器中看到该服务的注释掉版本(哪个编辑器取决于环境;默认情况下,在 Ubuntu 24.04 上它应该是
nano
)。更改文件,使其看起来像这样:
然后保存文件(在
nano
:Ctrl+ O/ Enter/ Ctrl+ X)。最后运行:
请注意,需要覆盖
/lib/systemd/system/php8.3-fpm.service
(而不是手动编辑)因为 PHP-FPM 的更新很可能会改变/lib/systemd/system/php8.3-fpm.service
,从而有效地恢复您所做的更改。