ThinkPHP 6 虽无内置任务分组概念,但可通过命令命名(如cache:clear)、队列配置(queue => 'order')、crontab 拆分调度、日志与运行时环境按组隔离等策略实现清晰可维护的分组管理。

ThinkPHP 6 的定时任务本身不内置“任务分组”概念,但通过合理设计命令命名、队列配置和 crontab 调度策略,完全可以实现清晰、可维护、可隔离的任务分组管理。关键不在框架是否支持“分组”标签,而在于你如何组织命令、路由日志、隔离执行环境。
命令命名即分组:用冒号统一划分层级
TP6 的 console 命令天然支持冒号语法(如 cron:backup、sync:order、notify:email),这是最轻量也最规范的分组方式:
- 命名格式统一为 领域:动作,例如:
cache:clear、stat:hourly、pay:refund-check - 在
config/console.php中注册时,键名直接体现分组:'cache:clear' => 'app\command\CacheClear' - 执行时能直观识别归属:
php think cache:clear比php think clearcache更易归类与排查 - crontab 脚本中可按组集中管理日志路径,例如所有
sync:类任务共用/runtime/log/sync/目录
队列驱动按业务隔离:queue 配置即分组标识
当任务交由 think-queue + Redis 执行时,config/queue.php 中的 'queue' 配置值就是实际的分组锚点:
- 设置
'queue' => 'order',该任务只会被php think queue:listen --queue order消费 - 不同业务线使用不同 queue 名:订单用
order,消息用notify,风控用risk - Redis 中对应键名为
queues:order、queues:notify,天然物理隔离,互不干扰 - 发布任务时明确指定队列:
Queue::push('app\job\TimeoutOrderJob', $data, 'order')
crontab 调度按职责拆分:避免单条规则承载多逻辑
不要把多个分组任务塞进同一行 crontab,应按业务粒度拆分调度单元:
立即学习“PHP免费学习笔记(深入)”;
- 每组任务单独一行,注释标明分组用途,例如:
# [SYNC] 每5分钟同步支付状态 - 不同分组可设不同执行频率:
*/5 * * * * /usr/bin/php ... sync:pay-statusvs0 2 * * * /usr/bin/php ... backup:db - 日志文件按分组命名:
> /tmp/cron-sync.log、> /tmp/cron-backup.log,便于监控与轮转 - 敏感任务(如退款)建议加锁或限制并发,避免同组多个实例同时操作同一资源
运行时上下文按组初始化:防止跨组污染
CLI 环境下,各分组命令可能依赖不同配置或连接,需主动隔离:
- 在
execute()开头显式切换配置环境:app('config')->set(['database' => [...]], 'order'); - 数据库连接按组复用:
Db::connect('order_db')或app('db.order')->query(...) - 日志通道按组区分:
Log::channel('cron_order')->info(...),避免混入无关记录 - 临时目录按组隔离:
runtime/cron/order/、runtime/cron/notify/,防止文件覆盖或权限冲突



















