ThinkPHP6 结合 Workerman 可实现跨平台秒级/毫秒级定时任务,无需系统 crontab;通过 think-worker 扩展和 Timer 类注册任务,支持多应用、命令行启动与守护进程管理,并可集成 http-crontab 实现 Web 可视化调度。

ThinkPHP6 结合 Workerman 搭建定时任务,核心是利用 Workerman 的 Timer 类实现秒级/毫秒级调度,同时通过 TP6 命令行或 Worker 服务方式启动。整个过程不依赖系统 crontab,可跨平台运行(Windows/Linux),也支持多应用结构。
安装与基础配置
在项目根目录执行:
- 安装 think-worker 扩展:
composer require topthink/think-worker - TP6 默认为单应用模式;若使用多应用(如 admin、api),需先安装
topthink/think-multi-app并生成对应应用目录 - 确保 PHP 已启用
pcntl和posix扩展(Linux 必须,Windows 下部分功能受限)
创建定时任务类(推荐命令行方式)
运行命令生成自定义指令:
-
php think make:command TimerTask,会在app/command下生成类文件 - 在
execute()方法中初始化 Worker,并在onWorkerStart中注册 Timer - 示例:每 3 秒写一次日志
use Workerman\Worker;
use Workerman\Lib\Timer;
$worker = new Worker();
$worker->count = 1;
$worker->onWorkerStart = function ($worker) {
Timer::add(3, function () {
file_put_contents('runtime/log/timer.log', date('Y-m-d H:i:s') . " 定时任务执行\n", FILE_APPEND);
});
};
Worker::runAll();
启动与管理任务
启动后进程常驻内存,需手动控制生命周期:
- 前台运行:
php think timer-task start(假设指令名为 timer-task) - 守护进程方式(Linux):
php think timer-task start -d - 停止任务:按
Ctrl+C(前台)或用kill终止进程(后台) - 如需动态启停,可在类中保存
$timerId,调用Timer::del($timerId)精确取消
进阶:可视化与持久化管理
若需 Web 界面增删改查任务,可接入开源方案 http-crontab:
- 安装:
composer require cshaptx4869/http-crontab - 复制
.example.env为.env,配置数据库连接 - 启动后台:
php think run -p 8888,再运行php crontab.php start - 访问
http://127.0.0.1:8888/admin,支持 cron 表达式(含秒位)、状态监控、日志查看
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











