Webman命令需按场景精准使用:start(前台调试)、start -d(后台运行)、stop(优雅停止)、restart(配置变更后全量重启)、reload(仅重载业务代码);reload不生效时须检查OPcache或动态加载逻辑。

Webman 的命令不是靠 php start.php 一把梭就能覆盖全部场景的——很多操作不执行对的命令,轻则配置不生效,重则进程异常退出、日志错乱、甚至服务假死。
启动、停止、重启:别只记 start
webman 的生命周期管理命令必须按场景区分,不能无脑 php start.php start 了事:
-
php start.php start:前台运行(调试时用),终端关闭即服务终止;加-d可启用调试模式(自动加载 monitor 进程) -
php start.php start -d:开发环境推荐,文件变更自动 reload,但仅限 Linux/macOS;Windows 需改用php windows.php -
php start.php stop:优雅停止,等待当前请求完成再退出;若卡住,可补kill -9对应 master 进程 PID -
php start.php restart:先 stop 再 start,适用于修改了config/server.php或新增了 composer 包 -
php start.php reload:仅重载业务代码(如控制器、中间件、路由),不重启进程;正式环境改完config/route.php后必须用它,否则路由不更新
注意:reload 不会重新加载 server.php 或 app.php,这类配置改了就得 restart。
start.php 报错常见原因与对应命令
看到 WORKER EXIT UNEXPECTED 或 PHP Fatal error 不要直接重试,先查根本原因:
- 错误信息含
exit/die:业务代码里写了exit或die—— webman 是常驻内存模型,禁止使用,会强制杀掉 worker 进程 - 报
Class not found:composer 自动加载未更新,执行composer dump-autoload,再php start.php restart - 启动后访问 404:确认
config/route.php已写入路由,并且用了Route::get()等正确方法;检查是否漏了->middleware()导致被拦截 - 日志里反复出现
Connection refused:可能是 Redis/MySQL 服务没起来,或config/database.php配置错误,此时php start.php start会失败但不报具体错,得看runtime/log/下的 error 日志
开发期高频辅助命令:别总手动翻日志
调试阶段光靠浏览器和 var_dump 效率极低,这些命令能快速定位问题:
-
php start.php status:查看当前 worker 进程数、运行时间、连接数,判断是否真在跑 -
tail -f runtime/log/error.log:实时盯错误日志(Linux/macOS);Windows 可用type runtime\log\error.log或编辑器打开 -
php start.php connections:列出当前所有 TCP 连接(调试长连接、WebSocket 场景必备) -
php start.php clean:清空runtime/cache和runtime/log,避免旧缓存干扰新逻辑
特别提醒:var_dump 和 echo 在调试模式下输出到终端而非页面,别在浏览器里等回显;想打到页面请用 response()->json() 或模板 。
正式环境部署必须绕开的坑
上线后最怕“本地好好的,线上挂了”,关键就卡在几个命令行为差异上:
- 正式环境禁用
-d参数:monitor 进程不会启动,reload失效;改代码后必须php start.php reload(如果开了 reload 支持)或restart -
php start.php start在 systemd 或 supervisor 下要用--daemon模式,否则进程会前台阻塞;推荐用php start.php start -d+ supervisor 管理 - 修改
config/app.php中的'debug' => false后,必须restart,因为 debug 开关影响 opcode 缓存策略 - 升级 webman 版本后,别只
composer update,还要运行php start.php restart—— 新版可能引入新的进程初始化逻辑
最易忽略的一点:webman 的 reload 不等于 PHP-FPM 的平滑重启,它只是重新 require 业务文件;如果中间件里有静态变量或全局状态,reload 后不会重置——这种设计是为了性能,但也意味着你得自己保证无状态。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











