多进程计划任务
基于 workerman 和 redis 实现的多进程计划任务模块。

介绍

本模块是基于WorkermanRedis实现的多进程计划任务系统,具有以下核心特性:

  • 多进程架构:由Workerman框架提供多进程支持
  • 任务分配机制:通过Redis实现任务队列,确保任务不会重复分配。
  • 跨平台支持:兼容 Windows 和 Linux 操作系统

功能特性

多进程支持
  • Linux 环境:完整支持多进程,避免任务阻塞
  • Windows 环境:由于 Workerman 限制,仅支持单进程模式
任务执行方式
  • URL 访问:支持通过 HTTP/HTTPS 协议访问指定 URL
  • 类方法调用:支持直接执行项目中的类方法
  • 执行 SQL: 支持执行原生 SQL 语句
高级功能
  • 动态任务管理:支持动态添加定时任务(如:订单超时自动取消)
  • 执行次数控制:可设置任务执行次数(如:失败重试机制)
  • 任务提前终止:支持在任务逻辑中主动终止任务执行
  • 服务恢复:服务重启后自动恢复任务

安装指南

安装成功后系统将自动完成以下配置:

  1. 常规管理菜单中添加计划任务子菜单
  2. 生成配置文件/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; // 继续执行 }

注意事项

  1. 更新模块前请先停止服务
  2. 出现"类方法不存在"错误时,请检查:
    • 方法是否正确定义
    • 命名空间和类方法名拼写
    • 服务是否已重启(Windows 需重新运行 bat 文件,Linux 需执行 reload 命令)
  3. 避免直接修改数据库中的任务参数
  4. 配置修改后需要重启服务生效

从V1升级到V2

  • V1版本的动态添加任务仍然兼容,将在下个大版本停止兼容。
  • plantask表有结构性改动,如果升级失败请尝试手动执行\modules\plantask\Plantask中的update方法或联系作者。如果任务数据无需保留,可卸载V1版本后重新安装V2版本。

更新日志

  • 2026-03-10 21:39:45

    v2.2.2

    优化细节与修复已知问题
    • 优化用户体验、修复已知bug。感谢用户反馈(铭华、Joker)
  • 2026-03-06 17:14:18

    v2.2.1

    修复已知问题
    • 修复多进程环境生成雪花ID冲突问题
  • 2026-02-09 15:11:58

    v2.2.0

    优化用户体验,修复已知问题
    • 新增:新增任务分组功能,支持分组筛选
    • 新增:新增复制任务功能
    • 修改:日志ID改为雪花ID
    • 修复:添加任务返回的ID为null
    • 修复:添加任务时,排序字段不生效
    • 修复:页面显示错误
  • 2025-06-20 21:06:41

    v2.1.0

    新增功能,修复bug
    • 新增:执行错误数量展示、筛选
    • 新增:任务测试执行
    • 修复:日志响应字段为 null 时,日志列表报错
  • 2025-05-13 14:45:00

    v2.0.0

    新增 `SQL` 任务类型等
    • 新增SQL任务类型
    • 新增Crontab规则重复周期
    • 新增排序功能
    • 新增任务执行日志
    • 新增任务随机分配模式
    • 优化执行异常导致任务停止执行
    • 优化页面布局
    • 废弃字段class_methodurl,使用goal字段代替
    • 废弃字段interval,使用rule字段代替
    • 废弃字段error_description,错误信息记录在执行日志中
    • 废弃字段is_amend
  • 2025-02-26 21:43:37

    v1.0.0

    首次发布

    无详细更新日志

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