php5.3+版本的php-fpm的重启/关闭

    网上常用的做法是 发送信号 来操作php-fpm

    但是还有一种更好的解决办法就是

    在 php的源码安装包里面

        chmod +x php-5.5.12/spai/fpm/init.d.php-fpm 

    这个是启动脚本,我们可以用来控制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 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

查看php-fpm进程数:

ps aux | grep -c php-fpm

[zabbix] user = apache group = apache listen = /run/php-fpm/zabbix.sock listen.acl_users = apache,nignx listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_value[max_execution_time] = 300 php_value[memory_limit] = 128M php_value[post_max_size] = 16M php_value[upload_max_filesize] = 2M php_value[max_input_time] = 300 php_value[max_input_vars] = 10000 php_value[date.timezone] = Asia/Shanghai ~ ~ ~ 这是/etc/php-fpm.d/zabbix.conf里的配置文件,以下是报错信息[root@ecs-web ~]# php-fpm -t [08-Nov-2025 16:54:13] ERROR: [/etc/php-fpm.d/zabbix.conf:6] unknown entry 'listen.acl_users' [08-Nov-2025 16:54:13] ERROR: Unable to include /etc/php-fpm.d/zabbix.conf from /etc/php-fpm.conf at line 6 [08-Nov-2025 16:54:13] ERROR: failed to load configuration file '/etc/php-fpm.conf' [08-Nov-2025 16:54:13] ERROR: FPM initialization failed [root@ecs-web ~]# systemctl status php-fpmphp-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Sat 2025-11-08 16:47:59 CST; 6min ago Process: 11828 ExecStart=/usr/sbin/php-fpm --nodaemonize (code=exited, status=78) Main PID: 11828 (code=exited, status=78) Nov 08 16:47:59 ecs-web systemd[1]: Starting The PHP FastCGI Process Manager... Nov 08 16:47:59 ecs-web php-fpm[11828]: [08-Nov-2025 16:47:59] ERROR: [/etc/php-fpm.d/zabbix.conf:6] unknown entry 'listen.acl_users' Nov 08 16:47:59 ecs-web php-fpm[11828]: [08-Nov-2025 16:47:59] ERROR: Unable to include /etc/php-fpm.d/zabbix.conf from /etc/php-fpm.conf at line 6 Nov 08 16:47:59 ecs-web php-fpm[11828]: [08-Nov-2025 16:47:59] ERROR: failed to load configuration file '/etc/php-fpm.conf' Nov 08 16:47:59 ecs-web php-fpm[11828]: [08-Nov-2025 16:47:59] ERROR: FPM initialization failed Nov 08 16:47:59 ecs-web systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Nov 08 16:47:59 ecs-web systemd[1]: Failed to start The PHP FastCGI Process Manager. Nov 08 16:47:59 ecs-web systemd[1]: Unit php-fpm.service entered failed state. Nov 08 16:47:59 ecs-web systemd[1]: php-fpm.service failed. [root@ecs-web ~]#
最新发布
11-09
<think>我们正在解决 `/etc/php-fpm.d/zabbix.conf` 配置文件中出现 `unknown entry &#39;listen.acl_users&#39;` 错误的问题。该错误导致 PHP-FPM 无法启动。 根据之前的分析,`listen.acl_users` 是较新版本 PHP-FPM 中引入的配置项,而在旧版本中不支持。因此,我们需要使用旧版本支持的配置方式替代。 在提供的引用中,引用[3]展示了一个配置案例,其中使用了 `user` 和 `group` 指令,以及 `listen.allowed_clients` 进行访问控制。同时,引用[2]提到 `listen.allowed_clients` 用于指定允许连接的客户端IP。 因此,我们可以采取以下步骤: 1. **移除或替换不支持的指令**:将 `listen.acl_users` 替换为旧版本支持的配置方式。 2. **使用文件权限控制**:通过设置 socket 文件的属主和权限,以及配合 `listen.owner` 和 `listen.group` 来实现访问控制。 3. **使用 `listen.allowed_clients`**:通过 IP 地址限制访问(注意:这只对 TCP 监听有效,对 Unix Socket 无效)。 然而,注意在配置中,当前监听使用的是 Unix Socket(`listen = /run/php-fpm/zabbix.sock`)。对于 Unix Socket,不能使用 `listen.allowed_clients`(因为该指令只用于 TCP 监听),所以我们需要通过文件系统权限来控制访问。 具体修改建议: - 删除 `listen.acl_users` 行。 - 确保设置正确的 `listen.owner` 和 `listen.group`(如果配置中已有,则检查是否正确;若没有,则添加)。 - 设置 `listen.mode` 来指定 socket 文件的权限。 另外,注意在配置文件中已经有一行 `listen.allowed_clients = 127.0.0.1`,由于监听的是 Unix Socket,这个配置实际上不会生效,可以删除或注释掉。 修改后的配置片段: ``` [zabbix] user = apache group = apache listen = /run/php-fpm/zabbix.sock ; 以下两行设置 socket 的属主和属组,以及权限 listen.owner = apache listen.group = nginx # 注意:这里根据实际情况,如果 nginx 用户需要访问,则设置属组为 nginx,并配合 listen.mode listen.mode = 0660 # 这样属主和属组都有读写权限 ; 对于 Unix Socket,listen.allowed_clients 无效,可以删除或注释掉 ; listen.allowed_clients = 127.0.0.1 ... 其他配置保持不变 ... ``` 注意:这里我们将 socket 文件的属主设置为 apache(与 PHP-FPM 的工作进程用户一致),属组设置为 nginx,这样 nginx 进程(通常以 nginx 用户运行)就可以通过组权限访问该 socket。同时,权限设置为 0660,即属主和属组有读写权限,其他用户无权限。 如果 nginx 和 php-fpm 运行在同一个用户下(比如都是 apache 或者都是 nginx),那么设置相同的用户即可。 另外,请确保 `/run/php-fpm` 目录存在,并且有适当的权限(通常由系统自动创建,但如果没有,需要手动创建并设置权限)。 修改配置文件后,执行以下步骤: 1. 检查配置文件语法:`php-fpm -t` 2. 如果检查通过,重启 php-fpm 服务:`systemctl restart php-fpm` 3. 检查服务状态:`systemctl status php-fpm` 如果遇到权限问题,可能需要检查 socket 文件的权限。如果 php-fpm 启动后 socket 文件权限不符合配置,则需要检查配置是否正确加载。 如果问题仍然存在,可能需要考虑升级 PHP 版本,或者查看具体错误日志(通常位于 `/var/log/php-fpm/error.log` 或系统日志中)。 根据引用[1]中的错误示例(unknown entry &#39;user&#39;),我们发现配置项放置的位置也很重要。确保这些配置项(listen.owner, listen.group, listen.mode)放在 `listen = ...` 之后,并且位于同一个池配置中。 如果用户的环境非常旧(例如 PHP 5.3),可能连 `listen.owner` 和 `listen.group` 都不支持。在这种情况下,只能通过操作系统的文件权限来控制:在启动 php-fpm 后,手动修改 socket 文件的属主和权限。但这不太方便,因此建议升级 PHP 版本。 不过,从问题中使用的配置项(如 `pm = dynamic` 等)来看,应该不是特别旧的版本,所以 `listen.owner` 和 `listen.group` 应该是支持的。 综上所述,我们修改配置文件的步骤如下: 步骤一:编辑配置文件 `/etc/php-fpm.d/zabbix.conf` 步骤二:删除或注释掉 `listen.acl_users` 行 步骤三:添加(或修改)`listen.owner`、`listen.group` 和 `listen.mode` 配置项 步骤四:删除或注释掉 `listen.allowed_clients`(因为它对 Unix Socket 无效,而且可能会引起混淆) 修改后的配置示例: ``` [zabbix] user = apache group = apache listen = /run/php-fpm/zabbix.sock listen.owner = apache listen.group = nginx listen.mode = 0660 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ... 其他配置保持不变 ... ``` 步骤五:保存并退出,然后测试配置文件。 如果测试通过,重启服务即可。 如果测试不通过,请根据错误信息调整。 如果遇到目录不存在,可以创建目录并设置权限: ```bash mkdir -p /run/php-fpm chown apache:apache /run/php-fpm # 或者 chown apache:nginx,根据配置中的用户和组 chmod 755 /run/php-fpm ``` 注意:在 systemd 管理的系统中,通常使用 `/run` 下的临时目录,重启后会消失,因此需要确保 php-fpm 服务能够自动创建该目录。如果服务配置正确,php-fpm 启动时会自动创建该目录和 socket 文件。 如果仍然无法启动,请检查错误日志(使用 `journalctl -u php-fpm` 或查看 `/var/log/messages` 等)。 相关问题: 1. 如何查看当前 PHP-FPM 版本? 2. 如何设置 PHP-FPM 的 socket 文件权限? 3. 在 Nginx 中如何配置 PHP-FPM 的 Unix Socket 连接? </think>### 解决 PHP-FPM "unknown entry &#39;listen.acl_users&#39;" 错误 #### 问题分析 错误核心原因是 `listen.acl_users` 配置项与当前 PHP-FPM 版本不兼容: 1. **版本限制**:`listen.acl_users` 是 PHP 7.3+ 引入的新特性[^3][^4] 2. **配置冲突**:旧版 PHP-FPM(如 PHP 5.x)无法识别该指令 3. **依赖关系**:Zabbix 通常需要新版 PHP,但服务器可能运行旧版环境 #### 解决方案(三步操作) ##### 步骤一:修改 Zabbix 配置 编辑配置文件并替换不兼容项: ```bash vim /etc/php-fpm.d/zabbix.conf ``` 修改以下内容: ```diff - listen.acl_users = apache,nignx # 删除此行 + listen.owner = apache # 新增权限控制 + listen.group = nginx # 确保与Web服务器用户组匹配 + listen.mode = 0660 # 设置Socket文件权限 ``` ##### 步骤二:验证配置 ```bash # 测试配置文件语法 php-fpm -t # 预期成功输出示例 [09-Nov-2025 10:00:00] NOTICE: configuration file /etc/php-fpm.conf test is successful ``` ##### 步骤三:重启服务 ```bash # 强制停止残留进程 pkill -9 php-fpm # 启动服务 systemctl start php-fpm # 验证状态 systemctl status php-fpm ``` #### 完整配置示例 ```ini [zabbix] user = apache group = apache listen = /run/php-fpm/zabbix.sock ; 新版兼容方案(PHP 7.3+) ; listen.acl_users = apache,nginx ; 旧版兼容方案 listen.owner = apache listen.group = nginx listen.mode = 0660 pm = dynamic pm.max_children = 50 ... # 其他参数保持不变 ``` #### 关键说明 1. **权限原理**: $$ \text{权限} = \text{owner} \times \text{group} \times \text{mode} $$ 配置后 socket 文件权限为: ```bash -rw-rw---- 1 apache nginx /run/php-fpm/zabbix.sock ``` 2. **版本检测**: ```bash php-fpm -v | head -1 # 查看PHP版本 ``` - PHP < 7.3:必须使用 `listen.owner` + `listen.mode` - PHP ≥ 7.3:可使用 `listen.acl_users` 3. **错误排查**: ```bash journalctl -u php-fpm --since "5 min ago" | grep -i error ls -l /run/php-fpm/ # 检查socket权限 ``` #### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值