管理命令:服务管理
EasySwoole 在项目根目录提供 easyswoole.php 命令入口。server 命令负责启动、停止、重载和查看当前服务状态。
server
├── start 启动服务
├── stop 停止服务
├── reload 平滑重载 Worker
└── status 查看服务状态
运行模式
所有服务命令都应使用和启动时相同的运行模式:
# 使用 dev.php
php easyswoole.php server status --mode=dev
# 使用 produce.php
php easyswoole.php server status --mode=produce
省略 --mode 时使用框架默认模式。运行模式决定配置文件、PID 文件、日志目录和 Bridge 通信目标。服务以 produce 启动,却用 dev 执行管理命令,通常会读取到另一份 PID 或通信配置。
启动服务
前台启动适合本地调试:
php easyswoole.php server start
终端关闭后前台服务也会结束。生产环境可以使用守护模式:
php easyswoole.php server start -d --mode=produce
-d 是无值开关,框架会在本次启动时把 MAIN_SERVER.SETTING.daemonize 设为 true。启动过程会输出运行环境、监听地址、PID 文件、日志路径等信息,然后创建并启动 Swoole Server。
输出示例(开头的 EasySwoole Logo 已省略):
Environment
main server : SWOOLE_WEB listen address : 0.0.0.0
listen port : 9501 worker_num : 8
reload_async : true max_wait_time : 3
daemonize : true user : www
swoole version : 6.2.2 php version : 8.4.23
easyswoole version : 3.8.1 run mode : produce
pid_file : /var/www/project/Temp/produce.pid
log_file : /var/www/project/Log/produce.swoole.log
temp dir : /var/www/project/Temp
log dir : /var/www/project/Log
同一端口不能重复启动。启动失败时先检查:
php --ri swoole
lsof -nP -iTCP:9501 -sTCP:LISTEN
tail -f Log/produce.swoole.log
如果服务由 systemd 管理,应使用 systemctl start,不要同时再手动启动一份守护进程。
查看服务状态
php easyswoole.php server status --mode=produce
命令通过框架 Bridge 向正在运行的服务查询信息,输出分为两部分:
Environment:运行模式、PHP/Swoole 环境、目录及 PID/日志路径。Runtime:启动时间、连接数、请求量、Worker 状态等 Swoole 运行数据。
服务未启动、Bridge 不可达或运行模式错误时,状态查询会失败,而不是读取一份静态缓存。
实际输出类似:
Server status
Environment
main server : SWOOLE_WEB listen address : 0.0.0.0
listen port : 9501 worker_num : 8
daemonize : true swoole version : 6.2.2
php version : 8.4.23 easyswoole version : 3.8.1
run mode : dev
pid_file : /var/www/project/Temp/dev.pid
log_file : /var/www/project/Log/dev.swoole.log
temp dir : /var/www/project/Temp
log dir : /var/www/project/Log
Runtime
start_time : 2026-10-16 00:29:20 connection_num : 0
accept_count : 2 close_count : 2
worker_num : 8 user_worker_num : 5
idle_worker_num : 8 request_count : 8
response_count : 8 coroutine_num : 2
字段数量会随 Swoole 版本变化,计数也会随请求实时增长。
持续刷新
status 支持 --watch:
# 默认每 2 秒刷新
php easyswoole.php server status --mode=produce --watch
# 每 1.5 秒刷新
php easyswoole.php server status --mode=produce --watch=1.5
按 q、Esc 或 Ctrl+C 退出。刷新间隔必须是大于 0 的数字。--watch 需要交互式终端,不适合重定向、后台脚本或不支持终端控制的 Windows 环境。
平滑重载
php easyswoole.php server reload --mode=produce
命令读取当前模式的 PID 文件,确认 Master 进程存在,然后向 Master 发送 SIGUSR1。Swoole 会替换服务 Worker,但不会重新创建 Master、监听端口、自定义进程或整个 Server。
普通控制器和 Worker 中加载的业务代码通常可以通过 server reload 更新。easyswoole/task 创建的 Task Worker 及其加载代码应使用 task reload 更新;监听端口、Worker 数量、Server 类型、mainServerCreate() 中的子服务和普通自定义进程发生变化时必须完整重启。详细原理参见热重启。
命令提示信号已发送,仅表示 reload 已开始。发布脚本还应通过 server status、进程 PID、日志和健康检查确认新 Worker 已经就绪。
输出示例:
send server reload command to pid:18848 at 2026-10-16 00:50:21
停止服务
正常停止:
php easyswoole.php server stop --mode=produce
框架向 Master 发送正常终止信号,并最多等待约 15 秒确认进程退出。正常停止可以让进程执行退出清理,应优先使用。
只有服务无法正常退出时才强制停止:
php easyswoole.php server stop --mode=produce --force
--force 使用 SIGKILL,进程没有机会执行 finally、shutdown function、连接释放或缓冲区刷新。不要把强制停止作为日常发布方式。
正常停止成功时输出:
server stop for pid 18848 at 2026-10-16 00:55:08
若当前模式没有 PID 文件,则会输出:
pid file does not exist, please check whether to run in the daemon mode!
PID 和时间只是示例,应以本机输出为准。
命令速查
| 目的 | 命令 |
|---|---|
| 前台启动 | php easyswoole.php server start --mode=dev |
| 守护启动 | php easyswoole.php server start -d --mode=produce |
| 查看状态 | php easyswoole.php server status --mode=produce |
| 持续观察 | php easyswoole.php server status --mode=produce --watch=2 |
| 平滑重载 | php easyswoole.php server reload --mode=produce |
| 正常停止 | php easyswoole.php server stop --mode=produce |
| 强制停止 | php easyswoole.php server stop --mode=produce --force |
源码依据
下一章:进程管理。