PHP-FPM的error_log真实路径需通过配置文件确认:运行sudo grep -r "error_log =" /etc/php-fpm.conf /etc/php-fpm.d/ /etc/php/*/fpm/ 2>/dev/null,检查是否被注释、是否指向syslog(此时需用journalctl),并验证目录与文件权限及log_level设置。

直接看 /var/log/php-fpm/error.log,但别急着打开——先确认它真在那儿、有权限读、且日志功能已启用。
怎么找到真实的 error_log 路径
PHP-FPM 不一定用默认路径,尤其在 Ubuntu 或多版本共存环境里。error_log 的实际位置由配置文件决定,不是靠猜。
- 先查主配置:运行
sudo grep -r "error_log =" /etc/php-fpm.conf /etc/php-fpm.d/ /etc/php/*/fpm/ 2>/dev/null,找带等号的那行 - 常见落点包括:
/etc/php/8.1/fpm/pool.d/www.conf(Ubuntu)、/etc/php-fpm.d/www.conf(CentOS) - 如果看到
;error_log = /var/log/php-fpm/error.log,注意分号表示被注释——得删掉才能生效 - 若配置里写的是
syslog,那日志根本不在文件里,得用sudo journalctl -u php8.1-fpm -f查
tail -f 看日志时总显示“Permission denied”
不是命令错了,是权限没给对。PHP-FPM 进程以 www-data(Ubuntu/Debian)或 apache(CentOS)用户身份写日志,但你当前用户没读权限。
- 检查目录所有权:
ls -ld /var/log/php-fpm,如果不是www-data:www-data或apache:apache,就执行sudo chown www-data:www-data /var/log/php-fpm - 检查日志文件权限:
ls -l /var/log/php-fpm/error.log,确保至少是-rw-r--r--;如果属主不对,sudo chown www-data:www-data /var/log/php-fpm/error.log - 别用
sudo cat临时绕过——这看不到实时追加的内容,tail -f才是诊断线上问题的关键
日志里只看到“child exited with code 1”这种模糊信息
这是 PHP-FPM 进程崩溃的兜底提示,真正原因藏在更早的错误里,或者根本没打出来。
- 立刻执行
sudo tail -n 100 /var/log/php-fpm/error.log | grep -E "(Fatal|Error|warning|segmentation)",过滤关键线索 - 如果看到
Fatal error: Allowed memory size of ... exhausted,说明 PHP 内存超限,不是 FPM 配置问题,而是脚本本身要优化或调大memory_limit - 如果反复出现
unable to bind listening socket,检查listen =配置是否端口被占、socket 文件路径不可写、或 SELinux/AppArmor 拦截 - 某些致命错误(如扩展加载失败)只在服务启动时记一次,得结合
sudo systemctl status php8.1-fpm看最近一次启动的 stderr 输出
最常被忽略的一点:日志开关是两层控制——既要配置文件里 error_log 设了路径,也要确保 log_level 没设成 notice 以下(比如 notice 会漏掉 warning),否则低级别错误直接不记录。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











