CENTOS 7上PHP-FPM无法启动的问题处理

文章目录

[隐藏]

  • 0、一些辅助命令
  • 1、systemd的系统启动项
  • 2、php-fpm启动失败的原因
  • 3、临时解决办法
  • 4、长期解决办法

缘由:

现在自用的Linux主机系统我都是选的CentOS 7,用的PHP版本也升级到了PHP 7。在之前的主机、博客维护过程中已经出过不少问题,这次又碰到了一个问题——在主机因维护而重启后php-fpm没有正确启动导致博客无法正常访问,解决办法和之前的不太一样,所以在此记录一下,方便以后查阅、参考。

正文:

参考解答:

0、一些辅助命令
# ls -lt /etc/systemd/system/multi-user.target.wants/    # find / -type f -iname "php-fpm.conf" | xargs ls -lt  # grep -v '^;' /etc/opt/remi/php71/php-fpm.d/www.conf | grep 'listen'    # nginx -t  # grep "fastcgi_pass" /etc/nginx/nginx.conf  
1、systemd的系统启动项

应该是从CentOS 7开始,Linux服务管理器开始用systemd来替换之前的SysVinit,很多命令和之前不太一样,具体的可以参考之前记录的一篇文章「Linux的systemd相关知识学习」,这里只提一点:

# systemd里面的.service文件一般是放在下面这个目录下,当不记得服务名称了,可以去目录里看看  # ls -lt /usr/lib/systemd/system/  # cat /usr/lib/systemd/system/php71-php-fpm.service  

&

# 查看当前系统上现在有哪些开机启动项,如果不在的话使用enable进行添加  # ls -lt /etc/systemd/system/multi-user.target.wants/  # systemctl enable nginx  # systemctl enable php71-php-fpm  # systemctl enable mysqld  
2、php-fpm启动失败的原因
● php71-php-fpm.service - The PHP FastCGI Process Manager     Loaded: loaded (/usr/lib/systemd/system/php71-php-fpm.service; disabled; vendor preset: disabled)     Active: failed (Result: exit-code) since Wed 2018-05-05 10:38:32 CST; 36s ago    Process: 5500 ExecStart=/opt/remi/php71/root/usr/sbin/php-fpm --nodaemonize (code=exited, status=78)   Main PID: 5500 (code=exited, status=78)    May 05 10:38:32 ixyzero-centos systemd[1]: Starting The PHP FastCGI Process Manager...  May 05 10:38:32 ixyzero-centos php-fpm[5500]: [02-May-2018 10:38:32] ERROR: unable to bind listening socket for address '/var/run/php-fpm/php-fpm.sock': No such file or directory (2)  May 05 10:38:32 ixyzero-centos php-fpm[5500]: [02-May-2018 10:38:32] ERROR: FPM initialization failed  May 05 10:38:32 ixyzero-centos systemd[1]: php71-php-fpm.service: main process exited, code=exited, status=78/n/a  May 05 10:38:32 ixyzero-centos systemd[1]: Failed to start The PHP FastCGI Process Manager.  May 05 10:38:32 ixyzero-centos systemd[1]: Unit php71-php-fpm.service entered failed state.  May 05 10:38:32 ixyzero-centos systemd[1]: php71-php-fpm.service failed.  

即,没有 /var/run/php-fpm/php-fpm.sock 这个文件,导致无法绑定监听端口/文件,初始化失败。

之前出现这种问题,一般是以下原因之一:

  • php-fpm的配置文件里的listen.owner/group和Nginx配置文件里的user/group不匹配,导致权限不够;
  • php-fpm的配置文件里的listen和Nginx配置文件里的fastcgi_pass不匹配,导致监听和读取的不是同一个socket文件;
3、临时解决办法

但这次不是,这次的上面2个配置都是对的,但就是 /var/run/php-fpm/php-fpm.sock 这个文件不存在,解决办法也很简单,就是:

# sudo mkdir -p /var/run/php-fpm/  # sudo touch /var/run/php-fpm/php-fpm.sock    # sudo systemctl start php71-php-fpm  

不过,一旦机器重启,/var/run/php-fpm/php-fpm.sock 这个文件就又没了,而且 /var/run/php-fpm/ 这个目录也没了,所以,这种手工创建目录、文件的方式只能临时生效。

4、长期解决办法

如果想要找到一个长期有效的办法,那就需要定位问题以及其背后的原因,否则问题还是会一直存在。

# 看 /var/run/ 目录权限  [[email protected] ~]$ ls -lt /var/ | grep "run"  lrwxrwxrwx.  1 root root   11 2月   3 2017 lock -> ../run/lock  lrwxrwxrwx.  1 root root    6 2月   3 2017 run -> ../run  [[email protected] ~]$  [[email protected] ~]$ ls -lt / | grep "run"  drwxr-xr-x  22 root root   620 5月   2 16:30 run    # 从上面的信息可以看出, /var/run 这个目录只有root才有「写」权限,而php-fpm的执行用户是和Nginx一样的低权限用户,所以无法创建 /var/run/php-fpm/ 子目录,从而也就无法创建 /var/run/php-fpm/php-fpm.sock 文件    # 目录 /var/run 有点「内存盘」的感觉,就是说它不是一直稳定存在的,而是只存在于内存中(网上有说法是这样会提高速度),当系统重启时,/var 下的目录便会消失,需要重新创建  

综上,我将原先php-fpm的配置文件里的listen和Nginx配置文件里的fastcgi_pass都改成了 /var/run/php-fpm.sock ,然后将php-fpm和Nginx服务都加入系统启动项,重启系统,一切OK。

原文出处:ixyzero -> https://ixyzero.com/blog/archives/3921.html

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。