CentOS7安装PHP7后php-fpm无法启动,报错“unknown entry '$listen'”怎么解决?
这种报错我碰到过好几次,大概率是你的php-fpm配置文件里出现了语法错误,尤其是$listen这个写法明显不符合配置规范。咱们一步步来排查解决:
第一步:精准定位错误的配置文件
直接用PHP-FPM自带的语法检查命令,它会帮你快速找到问题根源:php-fpm -t执行后会输出类似这样的明确提示:
ERROR: [/etc/php-fpm.d/www.conf:23] unknown entry '$listen'
ERROR: failed to load configuration file '/etc/php-fpm.conf'
ERROR: FPM initialization failed从输出里就能知道,是
/etc/php-fpm.d/www.conf的第23行出了问题。第二步:修复配置文件的语法错误
打开对应的配置文件(比如上面的/etc/php-fpm.d/www.conf):vi /etc/php-fpm.d/www.conf你大概率会看到类似
$listen = 127.0.0.1:9000的错误写法——PHP-FPM的配置里根本不需要在listen前面加$,直接改成正常格式即可:listen = 127.0.0.1:9000要是你想用性能更好的Unix套接字,也可以写成:
listen = /run/php-fpm/www.sock另外要注意:如果是复制粘贴来的配置,可能混入了全角符号或隐藏特殊字符,这时候可以用
cat -A /etc/php-fpm.d/www.conf查看行尾的特殊标记,把多余的符号删掉。第三步:验证配置并重启服务
修复完之后,再跑一遍语法检查确认没问题:php-fpm -t如果输出
test is successful,就可以启动php-fpm了:systemctl start php-fpm最后用状态命令确认服务正常运行:
systemctl status php-fpm.service额外提醒
PHP-FPM的配置文件不支持随意自定义变量(比如$listen这种写法),所有配置项都是固定的关键字,不要随便加$符号。如果需要引用环境变量,得用${ENV_VAR}的格式,并且确保对应的环境变量已经提前定义好,但一般来说直接写固定的监听地址或套接路径更稳妥。
内容的提问来源于stack exchange,提问作者敬錞 潘

