Workerman在宝塔面板跑不起来的主因是PHP缺pcntl/posix/event扩展、端口未通透(宝塔+云安全组+系统防火墙)、启动命令误用-d参数;需手动启用前两者、编译安装event、全路径调用PHP并重启服务验证。

Workerman 在宝塔面板里根本跑不起来,不是报错退出就是连不上——90% 是因为 PHP 缺扩展、端口没放通、或启动方式错了,不是 Workerman 本身有问题。
pcntl/posix/event 三个扩展必须手动装齐
宝塔默认 PHP(无论 7.4 还是 8.0)压根没开 pcntl、posix 和 event,这三个缺一不可:pcntl_fork() 找不到 → 进程起不来;pcntl_signal() 报错 → 热重启失效;没 event → 高并发下连接卡顿甚至断连。
-
pcntl和posix是 PHP 内置扩展,只需编辑对应 PHP 版本的php.ini(路径如/www/server/php/74/etc/php.ini),取消注释这两行:extension=pcntl、extension=posix -
event必须编译安装:先运行yum install libevent-devel -y(CentOS)或apt-get install libevent-dev -y(Ubuntu),再下载源码、执行/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 版本的「重载配置」或「重启」**,只改文件不重启等于白干
启动命令不能加 -d 参数(尤其用宝塔守护进程时)
宝塔「网站」或「计划任务」里设置自动启动,命令写成 php /www/wwwroot/your-project/start.php start 就行;如果加了 -d(即 daemon 模式),宝塔守护机制会失效,终端一关服务就死。
- 手动调试时可用
php start.php start -d,但上线后务必去掉-d - 验证是否真跑起来了:进终端执行
/www/server/php/74/bin/php start.php status,看到Workerman[xxx] process status才算成功 - 别信宝塔界面里「已启用」三个字——它只管 PHP 扩展开关,不管 Workerman 进程活没活
端口不通?三道防火墙都得检查
Workerman 默认监听 0.0.0.0:2345 这类非标准端口,光在宝塔「安全」里放行远远不够。
- 宝塔面板「安全」→ 添加端口(如
2345) - 云厂商控制台(阿里云/腾讯云等)的安全组规则里,也要放行对应 TCP 端口
- 服务器本地防火墙:CentOS 执行
firewall-cmd --zone=public --add-port=2345/tcp --permanent && firewall-cmd --reload;Ubuntu 用ufw allow 2345 - 启动时报
Address already in use?用netstat -anp | grep :2345查谁占着,杀掉再试
PHP 版本和系统 PATH 经常对不上
宝塔装了 PHP 7.4,但终端敲 php -v 显示 7.2——说明系统默认调用的不是宝塔装的那个 PHP。
- 查真实路径:
which php,大概率是/usr/bin/php,而宝塔 PHP 在/www/server/php/74/bin/php - 强制切换:
rm -f /usr/bin/php && ln -sf /www/server/php/74/bin/php /usr/bin/php - 所有启动脚本、计划任务、宝塔网站设置里的 PHP 调用,都要统一用全路径
/www/server/php/74/bin/php,避免混用
最易被忽略的是:扩展装完没重启 PHP、启动命令多写了 -d、端口只开了宝塔没开云厂商安全组——这三处出错,Workerman 表面启动了,实际连个连接都接不住。


















