PHP 重启 php-fpm 的几种方法

本文详细介绍了如何通过信号控制重启PHP-FPM服务的方法,包括查看master进程、使用kill命令发送USR2信号实现平滑重启,以及配置pid文件以便于后续管理和重启。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动php-fpm:

/usr/local/php/sbin/php-fpm

php 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,所以不要再看这种老掉牙的命令了,需要使用信号控制:

master进程可以理解以下信号

INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块

 一个简单直接的重启方法:

先查看php-fpm的master进程号

# ps aux | grep php-fpm | grep master | grep -v grep
root     13225  0.0  0.0 204820  7508 ?        Ss   09:37   0:01 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
You have new mail in /var/spool/mail/root

 

重启php-fpm:

kill -USR2 13225  

OK了。

上面方案一般是没有生成php-fpm.pid文件时使用,如果要生成php-fpm.pid,使用下面这种方案:

上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf这个配置文件,cat /usr/local/php/etc/php-fpm.conf 发现:

[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid

pid文件路径应该位于/usr/local/php/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 42891 重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:

php-fpm 关闭:
kill -INT 'cat /usr/local/php/var/run/php-fpm.pid'
php-fpm 重启:
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'

 

### PHP8.0 php-fpm 无法启动的解决方案及错误原因分析 PHP-FPMPHP 的 FastCGI 进程管理器,负责处理来自 Web 服务器(如 Nginx 或 Apache)的请求。当 `php80-php-fpm` 无法启动时,通常由以下几种常见原因引起: #### 1. 配置文件错误 PHP-FPM 的配置文件位于 `/etc/php/8.0/fpm/php-fpm.conf` 或 `/etc/php-fpm.d/www.conf`。如果配置文件中存在语法错误或不正确的参数设置,可能导致启动失败。例如,引用中提到的错误信息: ``` ERROR: [/usr/local/php5/etc/php-fpm.conf:144] value is NULL for a ZEND_INI_PARSER_ENTRY [^2] ``` 这表明在解析配置文件时,某个值为空或未正确设置。需要检查以下内容: - 确保所有配置项均被正确赋值。 - 检查是否有遗漏的分号或多余的空格。 可以通过以下命令验证配置文件是否正确: ```bash php80-php-fpm --test ``` #### 2. 端口冲突 PHP-FPM 默认监听 `127.0.0.1:9000`,如果该端口已被其他服务占用,会导致启动失败。引用中提到类似问题: ``` [18-Oct-2015 21:54:04] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98) [^5] ``` 解决方法- 使用以下命令检查端口占用情况: ```bash netstat -tulnp | grep 9000 ``` - 如果发现其他进程占用了 9000 端口,可以停止该进程或修改 PHP-FPM 的监听地址和端口。例如,在 `www.conf` 文件中将 `listen` 参数更改为: ```ini listen = 127.0.0.1:9001 ``` #### 3. 权限问题 PHP-FPM 启动时需要对日志文件、套接字文件等拥有写权限。如果权限不足,可能导致启动失败。确保以下目录和文件的权限正确: - 日志目录:`/var/log/php8.0-fpm/` - 套接字文件:`/run/php/php8.0-fpm.sock` 可以通过以下命令调整权限: ```bash chown -R www-data:www-data /var/log/php8.0-fpm/ chmod -R 755 /var/log/php8.0-fpm/ ``` #### 4. 扩展加载问题 某些 PHP 扩展可能与当前版本不兼容,导致启动时出现 `Segmentation fault` 错误。引用中提到类似问题: ``` Segmentation fault $php_fpm_BIN $php_opts [^1] ``` 解决方法- 检查 `php.ini` 文件中是否启用了不必要的扩展。 - 尝试禁用所有扩展后重新启动 PHP-FPM,逐步排查问题扩展。 #### 5. 系统资源限制 高并发场景下,系统资源不足可能导致 PHP-FPM 启动失败。引用中提到类似问题: ``` 因为这个机制,在高并发的站点中,经常导致 502 错误 [^4] ``` 解决方法- 调整 PHP-FPM 的进程池配置,例如增加 `pm.max_children` 和 `pm.start_servers` 的值。 - 检查系统资源限制,确保有足够的内存和 CPU 资源。 #### 6. 其他潜在问题 - **SELinux**:如果系统启用了 SELinux,可能会阻止 PHP-FPM 正常运行。可以通过临时关闭 SELinux 测试: ```bash setenforce 0 ``` - **依赖库缺失**:某些必要的动态链接库可能未安装。可以通过以下命令检查: ```bash ldd $(which php80-php-fpm) ``` --- ### 示例代码:检查 PHP-FPM 配置并尝试启动 以下脚本可用于检查 PHP-FPM 配置并尝试启动服务: ```bash #!/bin/bash # 测试配置文件 php80-php-fpm --test # 检查端口占用 netstat -tulnp | grep 9000 # 修改监听端口 sed -i 's/listen = 127.0.0.1:9000/listen = 127.0.0.1:9001/' /etc/php/8.0/fpm/pool.d/www.conf # 重启服务 systemctl restart php80-php-fpm ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值