GatewayWorker启动服务时,出现Call to undefined function pcntl_signal()报错提示的解决办法

前言

下载Linux系统的Demo后,解压并上传到宝塔的网站目录
进入GatewayWorker目录
命令行运行 php start.php start 启动GatewayWorker
这时出现以下报错:

[root@VM-0-7-centos GatewayWorker]# php start.php start
Workerman[start.php] start in DEBUG mode
PHP Fatal error:  Uncaught Error: Call to undefined function pcntl_signal() in /www/wwwroot/api.XXX.cn/GatewayWorker/vendor/workerman/workerman/Worker.php:1128
Stack trace:
#0 /www/wwwroot/api.XXX.cn/GatewayWorker/vendor/workerman/workerman/Worker.php(546): Workerman\Worker::installSignal()
#1 /www/wwwroot/api.XXX.cn/GatewayWorker/start.php(37): Workerman\Worker::runAll()
#2 {main}
  thrown in /www/wwwroot/api.XXX.cn/GatewayWorker/vendor/workerman/workerman/Worker.php on line 1128

Fatal error: Uncaught Error: Call to undefined function pcntl_signal() in /www/wwwroot/api.XXX.cn/GatewayWorker/vendor/workerman/workerman/Worker.php:1128
Stack trace:
#0 /www/wwwroot/api.XXX.cn/GatewayWorker/vendor/workerman/workerman/Worker.php(546): Workerman\Worker::installSignal()
#1 /www/wwwroot/api.XXX.cn/GatewayWorker/start.php(37): Workerman\Worker::runAll()
#2 {main}
  thrown in /www/wwwroot/api.XXX.cn/GatewayWorker/vendor/workerman/workerman/Worker.php on line 1128

经过查询,发现是php的pcntl_signal函数被禁用导致的。
在宝塔的php配置中,解除该函数的禁用,还是出现同样的报错
后来又查询centos7安装pcntl扩展,还有其他的一些答案,包括修改php的版本,都没有解决问题。
搜索到的很多解决办法,都是无效的,花费了不少时间。

怎么办呢?

解除php函数禁用

先检查系统已安装的php扩展:

php -m

发现pcntl扩展已经在列表中,说明已安装好了该扩展。
接下来去workerman官方网站顶部的搜索框,搜索pcntl_signal,找到了同样的问题,并指向网址。打开该网址,进入官网文档,里面提供了解决办法

首先使用脚本,检查禁用函数

curl -Ss https://www.workerman.net/check | php

执行结果:

[root@VM-0-7-centos GatewayWorker]# curl -Ss https://www.workerman.net/check | php
PHP Version >= 5.4.0                  [OK] 
Extension pcntl check                 [OK] 
Extension posix check                 [OK] 

Functions pcntl_signal_dispatch,pcntl_signal,pcntl_alarm,pcntl_fork,proc_open,shell_exec has be disabled. Please check disable_functions in /www/server/php/81/etc/php.ini
see http://www.workerman.net/doc/workerman/faq/disable-function-check.html

然后执行脚本以解除依赖的函数禁用

 curl -Ss https://www.workerman.net/fix | php

执行结果:

[root@VM-0-7-centos GatewayWorker]# curl -Ss https://www.workerman.net/fix | php
pcntl_exec                      [enabled] 
pcntl_alarm                     [enabled] 
pcntl_fork                      [enabled] 
pcntl_waitpid                   [enabled] 
pcntl_wait                      [enabled] 
pcntl_wifexited                 [enabled] 
pcntl_wifstopped                [enabled] 
pcntl_wifsignaled               [enabled] 
pcntl_wifcontinued              [enabled] 
pcntl_wexitstatus               [enabled] 
pcntl_wtermsig                  [enabled] 
pcntl_wstopsig                  [enabled] 
pcntl_signal                    [enabled] 
pcntl_signal_dispatch           [enabled] 
pcntl_get_last_error            [enabled] 
pcntl_strerror                  [enabled] 
pcntl_sigprocmask               [enabled] 
pcntl_sigwaitinfo               [enabled] 
pcntl_sigtimedwait              [enabled] 
pcntl_getpriority               [enabled] 
pcntl_setpriority               [enabled] 

success

最后再调用php start.php start成功启动服务,问题得到解决

[root@VM-0-7-centos GatewayWorker]# php start.php start
Workerman[start.php] start in DEBUG mode
--------------------------------------------- WORKERMAN ----------------------------------------------
Workerman version:4.0.27          PHP version:8.1.13
---------------------------------------------- WORKERS -----------------------------------------------
proto   user            worker                   listen                 processes    status           
tcp     root            YourAppBusinessWorker    none                   4             [OK]            
tcp     root            YourAppGateway           tcp://0.0.0.0:8282     4             [OK]            
tcp     root            Register                 text://0.0.0.0:1238    1             [OK]            
------------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Bad request for Register service. Request info(IP:127.0.0.1, Request Buffer:GET / HTTP/1.1). See http://doc2.workerman.net/register-auth-timeout.html
Register auth timeout (127.0.0.1). See http://doc2.workerman.net/register-auth-timeout.html

安装Composer

GatewayWorker目录,执行如下命令,安装composer.phar

curl -sS https://getcomposer.org/installer | php

更新版本

composer selfupdate

执行install命令

php composer.phar install

更新目录和依赖

php composer.phar update

参考资料

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » GatewayWorker启动服务时,出现Call to undefined function pcntl_signal()报错提示的解决办法

企业级大数据智能营销管理系统

了解详情