多进程计划任务
基于 workerman 和 redis 实现的多进程计划任务模块。
介绍
本模块是基于Workerman和Redis实现的多进程计划任务系统,具有以下核心特性:
- 多进程架构:由
Workerman框架提供多进程支持 - 任务分配机制:通过
Redis实现任务队列,确保任务不会重复分配。 - 跨平台支持:兼容 Windows 和 Linux 操作系统
功能特性
多进程支持
- Linux 环境:完整支持多进程,避免任务阻塞
- Windows 环境:由于 Workerman 限制,仅支持单进程模式
任务执行方式
- URL 访问:支持通过 HTTP/HTTPS 协议访问指定 URL
- 类方法调用:支持直接执行项目中的类方法
- 执行 SQL: 支持执行原生 SQL 语句
高级功能
- 动态任务管理:支持动态添加定时任务(如:订单超时自动取消)
- 执行次数控制:可设置任务执行次数(如:失败重试机制)
- 任务提前终止:支持在任务逻辑中主动终止任务执行
- 服务恢复:服务重启后自动恢复任务
安装指南
安装成功后系统将自动完成以下配置:
- 在常规管理菜单中添加计划任务子菜单
- 生成配置文件
/config/plantask.php,默认配置如下:
php
<?php // +---------------------------------------------------------------------- // | 计划任务设置 // +---------------------------------------------------------------------- return [ //启动进程数量 'processes' => 8, //监听新任务间隔时间(s) 'listen_task_interval' => 1, //执行任务间隔时间(s) 'interval' => 1, //任务分配模式,round(轮询:根据任务ID依次分配),random(随机:随机分配空闲进程) 'load_balance' => 'round', // 开启后会输出详细错误日志,修改配置后重启服务生效 'debug' => false, //redis配置 'redis' => [ 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'timeout' => 0 ] ]; 使用说明
服务启动
Windows 环境
双击/modules/plantask/commands/plantask_start_for_win.bat文件可快速启动服务。
Linux 环境
bash
php think plantask # 普通模式启动 php think plantask -d # 守护进程模式启动 php think plantask restart # 重启服务 php think plantask reload # 平滑重启服务 php think plantask stop # 停止服务 php think plantask status # 查看服务状态 字段说明
| 参数 | 参数名称 | 必填 | 说明 |
|---|---|---|---|
task_name | 任务名称 | 是 | 任务的标识名称 |
type | 任务类型 | 是 | 枚举值: - method:类方法调用- url:HTTP请求- sql:SQL执行 |
goal | 执行目标 | 是 | 根据type(任务类型)值不同:- method类型:填写执行的类方法。格式: \命名空间\类名@方法名,如:\app\api\controller\Index@test- url类型:填写完整的 URL。格式: [GET/POST ]https://example.com请求方式可省略,默认为GET,如 https://example.com。若有 URL 参数可填在参数字段。- sql类型:填写原生的 SQL 语句,表名需要带前缀,多条语句用;分隔。 |
params | 参数 | 否 | 参数为json格式,需要能被json_decode()函数解析。- method类型: 填写json数组,数组每个元素依次对应类方法中的参数,如:["参数1", "param2", {"name": "xx", "age": 20}, "参数4"]。- url类型:填写json对象,如{"name": "xx", "age": 20}。 |
repeat_times | 执行次数 | 否 | - 0:无限循环- 1:单次执行(默认)- n:指定次数 |
rule | 重复周期规则 | 否* | * 当repeat_times≠1时必填两种规则模式: 1. Int类型,间隔时间(秒)。如 3600则为每隔1小时执行一次。2. Crontab表达式: * * * * *。依次代表分 小时 日 月 周 |
run_time | 执行时间 | 否 | 秒级时间戳(默认立即执行) |
remark | 备注 | 否 | 任务备注,可在后台快速搜索中检索到对应任务。 |
weigh | 权重 | 否 | 仅用于后台排序展示(降序),对任务执行无影响。 |
在程序中动态添加任务
注意: V1版本的动态添加任务仍然兼容,将在下个大版本停止兼容。
php
// 添加任务示例 \modules\plantask\library\Task::add( task_name: '订单超时取消', type: 'method', goal: '\app\order\service\Order@autoCancel', params: '[ 100 , "订单超时未支付"]', run_time: time() + 30 * 60 //30分钟后执行 ); // 方法定义示例,新定义的方法需要重启服务才能生效。 public function autoCancel($order_id, $reason) { // $order_id接收到的参数为100 // $reason接收到的参数为"订单超时未支付" // 取消订单逻辑 // ... } 其他操作
php
// 修改任务 Task::edit(1, ['task_name' => '新任务名称']); // 启动任务 Task::start(1); // 停止任务 Task::stop(1); // 删除任务 Task::delete(1); 任务提前终止
在任务类方法中返回false可主动终止任务:
php
// 定义任务,执行5次 \modules\plantask\library\Task::add( task_name: '通知第三方服务器', type: 'method', goal: '\app\order\service\Order@notifyThirdParty', params: '[{"order_id": 100, "status": "failed"}]', repeat_times: 5 ); // 示例代码,通知第三方服务器,若对方返回值为规定的值则终止任务 public function notifyThirdParty($params) { //$params 接收到的参数为 ["order_id": 100, "status": "failed"] $result = $this->sendNotification($params); //若对方返回值为规定的值则终止任务 if ($result === 'SUCCESS') { return false; // 终止任务 } return true; // 继续执行 } 注意事项
- 更新模块前请先停止服务
- 出现"类方法不存在"错误时,请检查:
- 方法是否正确定义
- 命名空间和类方法名拼写
- 服务是否已重启(Windows 需重新运行 bat 文件,Linux 需执行 reload 命令)
- 避免直接修改数据库中的任务参数
- 配置修改后需要重启服务生效
从V1升级到V2
- V1版本的动态添加任务仍然兼容,将在下个大版本停止兼容。
plantask表有结构性改动,如果升级失败请尝试手动执行\modules\plantask\Plantask中的update方法或联系作者。如果任务数据无需保留,可卸载V1版本后重新安装V2版本。
更新日志
v2.2.2
优化细节与修复已知问题- 优化用户体验、修复已知bug。感谢用户反馈(铭华、Joker)
v2.2.1
修复已知问题- 修复多进程环境生成雪花ID冲突问题
v2.2.0
优化用户体验,修复已知问题- 新增:新增任务分组功能,支持分组筛选
- 新增:新增复制任务功能
- 修改:日志ID改为雪花ID
- 修复:添加任务返回的ID为null
- 修复:添加任务时,排序字段不生效
- 修复:页面显示错误
v2.1.0
新增功能,修复bug- 新增:执行错误数量展示、筛选
- 新增:任务测试执行
- 修复:日志响应字段为
null时,日志列表报错
v2.0.0
新增 `SQL` 任务类型等- 新增
SQL任务类型 - 新增
Crontab规则重复周期 - 新增排序功能
- 新增任务执行日志
- 新增任务随机分配模式
- 优化执行异常导致任务停止执行
- 优化页面布局
- 废弃字段
class_method、url,使用goal字段代替 - 废弃字段
interval,使用rule字段代替 - 废弃字段
error_description,错误信息记录在执行日志中 - 废弃字段
is_amend
- 新增
v1.0.0
首次发布无详细更新日志

fenglei
这家伙很懒,什么也没写~
模块授权
正版授权,允许商业使用
免费更新至一年内发布的所有版本
一年内发布的所有版本永久免费下载
不加密源代码,私有部署,二开方便
可复制产品,不支持七天无理由退款
禁止转售、分享等任何形式的再分发
仅 BuildAdmin 后台管理系统可以使用
模块信息
模块价格
¥19.90
访问次数
30343
模块标识
plantask
下载次数
185
模块分类
未归类
上次更新
2026-03-10 21:39:45
开发者主页
-
购买送积分
-
WorkermanTypeScriptCRUD+
推荐模块