求助 快被PHP-FPM搞疯了

CENTOS 6.5下,删除了之前用YUM安装过的PHP,然后下载php7源码编译安装。安装成功。

但是PHP-FPM无法启动

测试配置文件,成功。
[root@aaa php-fpm.d]# /usr/local/php7/sbin/php-fpm -t
[03-Feb-2017 04:24:54] NOTICE: configuration file /usr/local/php7/etc/php-fpm.conf test is successful

开启服务,提示一堆帮助。。怎么开启啊?
[root@aaa php-fpm.d]# /usr/local/php7/sbin/php-fpm start
Usage: php-fpm [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p <prefix>] [-g <pid>] [-c <file>] [-d foo[=bar]] [-y <file>] [-D] [-F [-O]]
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-h This help
-i PHP information
-m Show compiled in modules
-v Version number
-p, --prefix…………………………………………省略

查看进程

[root@aaa php-fpm.d]# ps -ef | grep PHP-fpm
root 1776 1649 0 04:29 pts/0 00:00:00 grep PHP-fpm

netstat -lntp 查看端口,里面没有PHP-FPM(肯定了,没有启动)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1397/mysqld
tcp 0 0 127.0.0.1:5901 0.0.0.0:* LISTEN 1464/Xvnc
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1424/nginx
tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN 1424/nginx
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1260/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1239/sshd


看命令帮助中有个参数-R
-R, --allow-to-run-as-root
Allow pool to run as root (disabled by default)

然后我运行了一下:/etc/init.d/php-fpm -R
接着执行了:/etc/init.d/php-fpm
[03-Feb-2017 04:39:16] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[03-Feb-2017 04:39:16] ERROR: FPM initialization failed

虽然初始化失败了,但是显示端口被占用,再次查看网络端口情况:

netstat -lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1787/php-fpm
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1397/mysqld
tcp 0 0 127.0.0.1:5901 0.0.0.0:* LISTEN 1464/Xvnc
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1424/nginx
tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN 1424/nginx
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1260/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1239/sshd

显示PID 1787/php-fpm在监听这个端口 127.0.0.1:9000。

......我艹,当我想再去截一下PHP无法解析NGINX 502错误的时候刷新了一下页面,现在正常了,泪奔!
~~>___<~~

clipboard.png

阅读 7.8k
2 个回答

-R选项的作用是允许这次用root权限运行,不是给root执行权限。

因为用root权限跑服务都有安全隐患(一旦被攻陷,攻击者就有了最高权限),所以php-fpm会做个检查,默认不能用root,要求自己确定要用。

所以第一次php-fpm -R的时候,php-fpm已经在运行了,没必要再来一次php-fpm(其实也不行,因为第一次成功的话已经占用端口了)。

端口占用了,就把占用的进程杀了。

还有/etc/init.d/php-fpm是脚本还是php-fpm本体呢?看题主的答案好像混淆了两者。

php-fpm不支持start选项,/usr/local/php7/sbin/php-fpm start肯定是一堆错误信息(其实是帮助信息),支持start的是/etc/init.d/下的那些脚本。

解决办法

给root运行权限
/etc/init.d/php-fpm -R

然后在执行一下就可以了
/etc/init.d/php-fpm

不过话说这样有安全隐患吗? 还有就是开机自动开启服务该怎么做?(百度搜索过,照做都会有问题,比如这样https://my.oschina.net/yearnf... /etc/init.d/php-fpm 我的目录里已经有这个文件了,如果替换成上文中的脚本执行/etc/init.d/php-fpm start不成功,脚本里的路径都已经改过。)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题