直接用 composer require 安装定时任务扩展是常见误区,它只装包不配环境;ThinkPHP6 定时任务需完整项目结构、服务注册和配置文件协同,必须用 create-project 重装标准骨架,再按步骤安装 EasyTask 或 Swoole 扩展、补全命令类、确保 runtime 可写,并通过 status/start/ps/log 多步验证生效。

直接用 composer require 安装定时任务扩展是常见误区——它只装包,不配环境,多数情况下运行会报错或根本没反应。ThinkPHP6 的定时任务依赖完整项目结构、服务注册和配置文件三者协同,必须按步骤补全。
先确认项目是标准 TP6 骨架
定时任务扩展不能在“半成品”项目上运行。如果你的项目是用 composer require topthink/think 装的,立刻停用——这只会拉一个空壳,Class 'think\Container' 报错就是典型症状。正确做法是:
- 用
composer create-project "topthink/think:^6.1" myapp重装(双引号防 shell 解析) - 进项目根目录,确认存在
public/index.php和vendor/autoload.php - 运行
php think version,能输出类似v6.1.8才算基础达标
选对扩展并安装到 vendor
TP6 定时任务有两类主流方案,别混用:
-
EasyTask:纯 PHP 实现,无需额外扩展,适合轻量级轮询(如每 30 秒请求一次接口)
命令:composer require easy-task/easy-task -
Swoole 原生定时器:性能高,需先装 Swoole 扩展
命令:composer require swoole/swoole:4.*,再在config/app.php的'providers'中添加thinkworkerProvider::class
安装后检查 vendor/easy-task/ 或 vendor/swoole/ 目录是否生成,否则说明镜像失败,先执行 composer clear-cache 再重试。
手动补全命令类与配置
扩展装完 ≠ 能用。以 EasyTask 为例:
- 运行
php think make:command Task生成命令类app/command/Task.php - 编辑该文件,把
execute()方法里$task->addFunc(...)的回调逻辑换成你的真实任务(比如调用模型写日志、发通知) - 若扩展自带配置(如
think-queue),需从vendor/topthink/think-queue/config/queue.php复制到项目config/下;EasyTask 不需要配置文件,但必须确保runtime/可写(chmod -R 755 runtime)
启动与验证任务是否生效
别直接跑 php think task start 就以为成了。先做两件事:
- 在终端运行
php think task status,返回 “not running” 是正常初始状态 - 执行
php think task start后,立刻用ps aux | grep task(Linux/macOS)或任务管理器(Windows)确认进程是否存在 - 等设定时间间隔后,检查
runtime/log/是否有新日志,或数据库/接口是否被触发
如果卡在 “Class not found”,大概率是服务提供者没注册或 autoload 没刷新——进项目根目录运行 composer dump-autoload 再试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











