- 🏠 简介
- 🔌 api接口
-
🔧 插件开发
- 介绍
- 插件优势
- 新建插件
- 技术栈
- 插件开发规范
- 插件目录结构
- model 层开发
- service 层开发
- api 接口开发
- menu 菜单开发
-
event 事件钩子开发
- 开发指南
- 常用事件
- SiteInit 站点初始化事件
- AddSiteAfter 站点创建后事件
- MemberRegister 会员注册后事件
- MemberLogin 会员登录后事件
- PayCreate 支付创建事件
- PaySuccess 支付成功事件
- RefundSuccess 退款成功事件
- TransferSuccess 转账成功事件
- BottomNavigation 底部导航事件
- NoticeData 消息模板数据内容事件
- GetQrcodeOfChannel 创建二维码事件
- ExportDataType 导出数据类型事件
- ExportData 导出数据源事件
- GetPosterType 海报类型事件
- GetPosterData 海报数据事件
- ShowCustomer 应用管理加载事件
- GetWechatTransferTradeScene 微信支付转账场景事件
- ThemeColor 主题风格事件
- initWap 手机端初始化加载事件
- dict 数据字典开发
- layout 自定义布局开发
- job 消息队列和计划任务开发
- notice 消息发送开发
- printer 小票打印模板开发
- export 数据导出开发
- diy 自定义组件/页面装修开发
- diy 自定义表单组件开发
- poster 自定义海报开发
- icon 引入图标
- 支付方式开发
- upgrade 插件版本升级
- 打包插件
- 授权信息变更回调通知
- 官网上架
- 📝 二次开发须知
- 👨💻 二次开发指导
-
🎬 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
计划任务开发
计划任务概述
过去,你可能需要在服务器上为每一个调度任务去创建 Cron 条目。因为这些任务的调度不是通过代码控制的,你要查看或新增任务调度都需要通过 SSH 远程登录到服务器上去操作,使用起来不是很方便。
现在你可以通过项目内置的任务调度器在项目中清晰明了地实现计划任务。

插件计划任务开发
定义计划任务模板
文件位置:niucloud\addon\shop\app\dict\schedule\schedule.php
关键代码:
<?php
return [
[
'key' => 'shop_order_close', //任务模板标识,必须是唯一的
'name' => '未支付订单自动关闭', //任务模板名称
'desc' => '', //任务介绍
'time' => [ //任务调度频率间隔
'type' => 'min', //任务调度频率类型
'min' => 1 //任务调度频率间隔
],
'class' => 'addon\shop\app\job\order\OrderClose', //任务消费层所在类的路径,类名为当前任务key值下划线转驼峰的类。例如当前任务key值为shop_order_close,任务消费类的位置就为niucloud\addon\shop\app\job\order\OrderClose.php,类名为OrderClose
'function' => '', //任务调用方法:如果为空的话会默认调用doJob方法。如果不为空的话会在class类内部直接调用当前方法
]
];
type任务调度频率类型:
| type(任务的调度频率) | 示例 | 说明 |
|---|---|---|
| min | min为1 | 表示每分钟运行一次任务 |
| hour | hour为1 min为1 | 表示每隔一小时的第几分钟运行一次任务 |
| day | day为1 hour为1 min为1 | 表示每隔一日的1时1分运行一次任务 |
| week | week为1 hour为1 min为1 | 表示每周周一的1时1分运行一次任务 |
| month | day为1 hour为1 min为1 | 表示每月一号的1时1分运行一次任务 |
编写具体的计划任务逻辑代码
文件位置:niucloud\addon\shop\app\job\

框架计划任务开发
框架计划任务开发和插件计划任务开发类似
定义任务模板及任务类
在 niucloud\app\dict\schedule\schedule.php 类中新增任务项

任务模板class值(任务消费类的位置)和function(方法名)
任务消费类所在位置,默认可以为空,如果为空的话会自动在niucloud\app\job\schedule\路径下寻找当前任务key值下划线转驼峰的类,如果类不存在,就在niucloud\app\job\schedule\路径下创建一个对应类
class值不为空的话,会直接通过class路径去直接寻找任务类
function值如果为空值的话会默认调用doJob方法,function值如果不为空值的话会在class类内部直接调用
添加计划任务
任务添加到模板之后,这时候任务还不能使用,还需要将任务模板写入到数据库中:
后台点击开发->计划任务->添加任务
选择任务模板
设置任务周期和是否启用
点击确定即可成功添加计划任务
运行计划任务
直接在终端运行命令
如果只是临时测试或手动运行计划任务,可以直接在终端执行以下命令:
php think cron:schedule
这个命令会立即启动计划任务调度器,开始执行已定义的计划任务
结合系统计划任务
结合项目所在服务器系统的计划任务来使用
* * * * * cd /您的项目路径 && php think cron:run >> /dev/null 2>&1
说明:
- `* * * * *` 表示每分钟执行一次
- `cd /您的项目路径` 切换到项目根目录
- `php think cron:run` 执行项目的计划任务
- `>> /dev/null 2>&1` 将输出重定向到空设备,避免生成大量日志文件
使用Supervisor保持常驻进程
调试完毕后,为了确保计划任务调度器能够持续运行而不会因系统重启或其他原因中断,推荐使用Supervisor来管理进程:
Supervisor配置示例:
[program:cron-schedule]
command=php think cron:schedule # 要执行的命令
directory=/www/wwwroot/您的项目路径/ # 项目目录
user=www # 执行用户
priority=999 # 优先级
numprocs=1 # 进程数量
配合宝塔使用
如果你使用宝塔面板,可以在面板中添加守护进程:
登录宝塔面板->进入「软件商店」->安装「Supervisor管理器」->点击「添加守护进程」->填写进程名称、执行目录和启动命令->启动命令填写:php think cron:schedule->保存并启动

注意事项
修改计划任务参数后,必须重启workerman才能使新配置生效
重启方法:
-
停止现有进程:
php think worker:stop -
重新启动:
php think worker:start