宝塔面板需手动启用pcntl、posix扩展并编译安装event扩展才能运行Workerman;因Workerman依赖进程控制、信号处理和高效事件循环,缺一不可,且PHP版本升级后须重装扩展。

宝塔面板本身不直接“安装Workerman”,而是为你准备好能跑Workerman的PHP环境;真正要装的是pcntl、posix和event这三个扩展——缺一个,php start.php start -d 就会报错退出或无法常驻。
为什么不能跳过扩展安装?
Workerman是纯PHP写的异步框架,但它不是靠sleep()或轮询硬扛,而是依赖Linux底层进程控制(pcntl)、信号处理(posix)和事件循环(event)。宝塔默认装的PHP(比如7.4/8.0)只开Web模块,这些扩展全被关着。你直接丢个start.php进去,运行几秒就死,连日志都不留——因为根本没加载成功。
-
pcntl:负责fork子进程,没有它,Worker进程起不来 -
posix:处理kill -USR1这类信号,热重启、平滑重启全靠它 -
event:替代PHP原生stream_select,大幅提升高并发下I/O效率(尤其WebSocket长连接)
在宝塔里装扩展的实操要点
别信一键脚本或“软件商店→PHP管理→安装扩展”里那些灰色不可点的选项——宝塔官方PHP源里压根没打包pcntl和posix,event也得手动编译。必须进终端操作:
- 先确认PHP路径:
/www/server/php/74/bin/php(74代表7.4,按你实际版本改) - 装
pcntl和posix不用动手编译,它们是PHP内置扩展,只需在php.ini里取消注释:extension=pcntl、extension=posix - 装
event必须编译:
– 运行yum install libevent-devel -y(CentOS)或apt-get install libevent-dev -y(Ubuntu)
– 下载event源码(如event-3.0.8.tgz),解压后执行:/www/server/php/74/bin/phpize && ./configure --with-php-config=/www/server/php/74/bin/php-config && make && make install
– 最后在php.ini加一行:extension=event - 改完
php.ini一定要重启PHP服务(宝塔面板里点“重载配置”或“重启”)
验证是否真装好了
别只看宝塔界面里“已启用”就放心。最靠谱的方式是进终端,执行:/www/server/php/74/bin/php -m | grep -E "pcntl|posix|event"。如果三行都出来,再跑:/www/server/php/74/bin/php start.php status,看到Workerman[xxx] process status才说明真活了。
- 常见错误现象:
PHP Fatal error: Uncaught Error: Call to undefined function pcntl_fork()→pcntl没启用或没生效 - 常见错误现象:
Warning: pcntl_signal(): pcntl extension is not available→posix缺失 - 常见错误现象:启动后CPU飙高但无响应 →
event没装,退回到低效的stream_select模式,一并发就卡死
最容易被忽略的是:宝塔升级PHP版本后,所有手动编译的扩展(尤其是event)会全部失效,php.ini里的extension=路径也可能变——每次换PHP,都得重走一遍编译+启用流程。










