Workerman 5.2.3 启动提示“权限不足”主因是端口绑定受限(如监听1–1023端口)、关键PHP函数被禁用(如pcntl_fork、stream_socket_server)或运行上下文权限不足(如Windows低IL会话、systemd未配User权限)。

Workerman 5.2.3 启动时提示“权限不足”,通常不是指 Linux 文件权限(如 chmod),而是指系统级运行权限或 PHP 运行环境受限。核心原因集中在三类:端口绑定权限、PHP 禁用函数、以及进程执行上下文的完整性级别限制。下面分情况说明具体判断和解决方法。
检查是否在监听特权端口(1–1023)
Linux/macOS 下,非 root 用户无法绑定 1024 以下端口。若配置中写的是 tcp://0.0.0.0:80 或 websocket://127.0.0.1:443,就会触发 Permission denied 错误。
- 临时方案:把端口改为 1024 以上,例如
2346、8080、9501 - 正式部署需用 80/443:不要直接用普通用户启动,应通过反向代理(Nginx)转发,Workerman 仍监听高权限端口
- 验证方式:运行
php start.php start前,先看启动脚本里new Worker('...')的地址字符串
确认关键 PHP 函数未被禁用
Workerman 依赖 pcntl_fork、stream_socket_server 等函数创建子进程和监听 socket。若这些函数出现在 disable_functions 中,会表现为“启动失败”或“权限不足”的模糊报错。
- 运行
php -i | grep disable_functions查看禁用列表 - 重点检查是否禁用了:
pcntl_fork、pcntl_signal、stream_socket_server、shell_exec - 修改对应 php.ini(注意是 CLI 模式用的配置,非 Web 模式),删掉禁用项,然后重启终端再试
Windows 系统下需特别处理 pcntl 扩展与执行环境
Windows 默认不支持 pcntl,而 Workerman 5.2.3 在 Windows 上要求 PHP 8.1+ 并通过 PECL 手动安装 pcntl 扩展;否则会因函数缺失抛出类似权限错误的致命异常。
- 确认是否在 Windows 上运行:是 → 必须使用 WSL2 或 Linux 服务器,或确保已成功编译安装 pcntl
- 运行
php -m | grep pcntl,无输出即未启用 - Git Bash / PowerShell 中启动时,避免路径含中文或空格;建议将项目放在
C:\workerman\这类简洁路径
计划任务或服务化启动时的会话权限问题
若通过 Windows 任务计划程序、systemd 或宝塔守护进程启动,常因运行在 Session 0 或低完整性级别(Low IL)导致无法访问网络、读取配置文件或加载扩展,日志中可能只显示“failed to start”而无明确错误。
- Windows 任务计划中,勾选“不管用户是否登录都要运行”并启用“使用最高权限”
- Linux systemd 服务文件中,确保
User=www-data(或对应用户)有读取项目目录、写入日志路径的权限 - 添加简单日志验证:在
start.php开头加file_put_contents('/tmp/workerman_test.log', "start at ".date('Y-m-d H:i:s')."\n", FILE_APPEND);,确认是否执行到该行

















