php - 在 ubuntu 上启动 php7.4-fpm 时出现问题
问题描述
我使用的是 nginx,而不是 apache。刚刚从 18.04 升级到 20.04,因此从 php7.2 升级到 php7.4。但是 php7.4-fpm 无法启动。这是我的日志。
ian@thebeb:/etc/php/7.4/fpm$ sudo /etc/init.d/php7.4-fpm restart
Restarting php7.4-fpm (via systemctl): php7.4-fpm.serviceJob for php7.4-fpm.service failed because the control process exited with error code.
See "systemctl status php7.4-fpm.service" and "journalctl -xe" for details.
failed!
ian@thebeb:/etc/php/7.4/fpm$ systemctl status php7.4-fpm.service
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2021-01-17 21:01:20 GMT; 9s ago
Docs: man:php-fpm7.4(8)
Process: 63191 ExecStart=/usr/sbin/php-fpm7.4 --nodaemonize --fpm-config /etc/php/7.4/fpm/php-fpm.conf (code=exited, status=127)
Process: 63205 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.4/fpm/pool.d/www.conf 74 (code=exited, status=0/SUCCESS)
Main PID: 63191 (code=exited, status=127)
Jan 17 21:01:20 thebeb systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
Jan 17 21:01:20 thebeb php-fpm7.4[63191]: /usr/sbin/php-fpm7.4: symbol lookup error: /usr/sbin/php-fpm7.4: undefined symbol: pcre2_set_depth_limit_8
Jan 17 21:01:20 thebeb systemd[1]: php7.4-fpm.service: Main process exited, code=exited, status=127/n/a
Jan 17 21:01:20 thebeb systemd[1]: php7.4-fpm.service: Failed with result 'exit-code'.
Jan 17 21:01:20 thebeb systemd[1]: Failed to start The PHP 7.4 FastCGI Process Manager.
ian@thebeb:/etc/php/7.4/fpm$ journalctl -xe
-- A start job for unit UNIT has begun execution.
--
-- The job identifier is 431.
Jan 17 21:01:10 thebeb dbus-daemon[3745]: [session uid=1000 pid=3745] Activating via systemd: service name='org.freedesktop.Tracker1' unit='tracker-store.service' requested by ':1.2' (uid=1000 pid=3742 >
Jan 17 21:01:10 thebeb dbus-daemon[3745]: [session uid=1000 pid=3745] Successfully activated service 'org.freedesktop.Tracker1'
Jan 17 21:01:10 thebeb systemd[3723]: Started Tracker metadata database store and lookup manager.
-- Subject: A start job for unit UNIT has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- A start job for unit UNIT has finished successfully.
--
-- The job identifier is 431.
Jan 17 21:01:15 thebeb kernel: [UFW BLOCK] IN=enp0s3 OUT= MAC=01:00:5e:00:00:01:bc:14:01:0f:f6:e6:08:00 SRC=192.168.0.1 DST=224.0.0.1 LEN=36 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
Jan 17 21:01:20 thebeb sudo[63180]: ian : TTY=pts/1 ; PWD=/etc/php/7.4/fpm ; USER=root ; COMMAND=/etc/init.d/php7.4-fpm restart
Jan 17 21:01:20 thebeb sudo[63180]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 17 21:01:20 thebeb systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
-- Subject: A start job for unit php7.4-fpm.service has begun execution
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- A start job for unit php7.4-fpm.service has begun execution.
--
-- The job identifier is 3745.
Jan 17 21:01:20 thebeb php-fpm7.4[63191]: /usr/sbin/php-fpm7.4: symbol lookup error: /usr/sbin/php-fpm7.4: undefined symbol: pcre2_set_depth_limit_8
Jan 17 21:01:20 thebeb systemd[1]: php7.4-fpm.service: Main process exited, code=exited, status=127/n/a
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- An ExecStart= process belonging to unit php7.4-fpm.service has exited.
--
-- The process' exit code is 'exited' and its exit status is 127.
Jan 17 21:01:20 thebeb systemd[1]: php7.4-fpm.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- The unit php7.4-fpm.service has entered the 'failed' state with result 'exit-code'.
Jan 17 21:01:20 thebeb systemd[1]: Failed to start The PHP 7.4 FastCGI Process Manager.
-- Subject: A start job for unit php7.4-fpm.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- A start job for unit php7.4-fpm.service has finished with a failure.
--
-- The job identifier is 3745 and the job result is failed.
Jan 17 21:01:20 thebeb sudo[63180]: pam_unix(sudo:session): session closed for user root
Jan 17 21:01:41 thebeb tracker-store[63047]: OK
Jan 17 21:01:41 thebeb systemd[3723]: tracker-store.service: Succeeded.
-- Subject: Unit succeeded
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- The unit UNIT has successfully entered the 'dead' state.
ian@thebeb:/etc/php/7.4/fpm$
符号查找错误,是符号查找错误:/usr/sbin/php-fpm7.4:未定义符号:pcre2_set_depth_limit_8。
我已经检查了我能想到的所有内容,但无法发现问题。现在我已经超出了我的深度!帮助。
请求后添加:
ian@thebeb:/etc/php/7.4/fpm$ ldd $(which php-fpm7.4)
linux-vdso.so.1 (0x00007ffefb4e7000)
libargon2.so.1 => /usr/lib/x86_64-linux-gnu/libargon2.so.1 (0x00007f13e38a6000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f13e388a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f13e373b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f13e3735000)
libapparmor.so.1 => /usr/lib/x86_64-linux-gnu/libapparmor.so.1 (0x00007f13e3720000)
libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f13e3671000)
libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f13e34b5000)
libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f13e3422000)
libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f13e2f57000)
libpcre2-8.so.0 => /usr/local/lib/libpcre2-8.so.0 (0x00007f13e2d0c000)
libz.so.1 => /usr/local/lib/libz.so.1 (0x00007f13e2af0000)
libsodium.so.23 => /usr/lib/x86_64-linux-gnu/libsodium.so.23 (0x00007f13e2a98000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f13e28a4000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f13e2881000)
/lib64/ld-linux-x86-64.so.2 (0x00007f13e3d6f000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f13e2876000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f13e284d000)
liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f13e282c000)
libgcrypt.so.20 => /usr/lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f13e270e000)
libicuuc.so.66 => /usr/lib/x86_64-linux-gnu/libicuuc.so.66 (0x00007f13e2526000)
libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f13e2503000)
libicudata.so.66 => /usr/lib/x86_64-linux-gnu/libicudata.so.66 (0x00007f13e0a42000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f13e0861000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f13e0846000)
ian@thebeb:/etc/php/7.4/fpm$
解决方案
pcre2_set_depth_limit_8
是一个库符号引用(在我的系统上它位于/usr/lib/apache2/modules/libphp8.0.so
),它再次出现在我的系统上,驻留在/usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.0
.
因此,我怀疑您系统上的 PCRE 软件包已损坏。检查libpcre2-8-0
包裹的状态。
或者只是做
ldd /usr/sbin/php-fpm7.4 | grep pcre2
并检查它指向的位置,或者它是否说找不到该库(在后一种情况下,您只需要 apt-get 安装它,显然该库的依赖项检查系统已损坏,因为它没有发现缺少)。
如果它确实指向一个 .so 文件,那么让我们检查一下该文件:例如(我只有一个 Raspberry 可用)
nm -gD /usr/lib/arm-linux-gnueabihf/libpcre2-8.so.0.7.1
应该报告库中的所有符号,而我们的 grep'ping确实找到了它:
0000f508 T pcre2_set_depth_limit_8
如果没有,那么这将意味着该库不包含该符号 - 对我而言,这表明该库必须以某种方式损坏,因为在其他系统上该符号存在。
Ubuntu 20.04
我记得我在其他地方有一个 20.04 可用。那里的图书馆libpcre2-8.so.0.9.0
:
-rw-r--r-- 1 root root 584392 Dec 7 2019 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0
符号就在那里。我拥有的 Ubuntu 软件包是libpcre2-8-0:amd64
.
# nm -gD /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0 | grep pcre2_set_depth_limit_8
00000000000116f0 T pcre2_set_depth_limit_8
推荐阅读
- racket - 使用关键字参数定义函数
- python - Django:html形式的网址无法正常工作
- huffman-code - 使用霍夫曼编码压缩文件
- ios - NSFetchRequest 返回的获取的对象不在正确的部分
- f# - F# - 如何方便地将列表中的元素应用于柯里化函数的参数?
- python - TinyDB 在表行之间插入
- c - 如何获得矩阵乘法器 C 程序的未知矩阵的正确尺寸?
- python - 使用 Pandas 导入 Excel 文件时出现 KeyError
- ffmpeg - ffmpeg 不生成调色板
- asp.net-core - Identity Server 4 用户模拟