目录
- niucloud-saas手册
- 源码下载
- 安装部署
- 二次开发须知
- 二次开发指导
- 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
- 常见问题
- 怎么添加菜单,添加了菜单不出现怎么回事
- 怎么配置跨域的问题
- 站点site端(租户端、商家端)和saas管理端(平台端)究竟啥意思,有啥区别
- 框架中是有订单表order,假如开发一个商城插件,请问商城的订单数据是不是重新搞一个订单表shop_order
- 有些支付平台是绑定回调唯一网址或目录,如果有几个开发者开发插件都有支付那这块怎么解决?
- 站点过期,可以登录,这样对吗?
- 计划任务怎么启动啊
- Git多分支开发,切换分支
- 安装应用出现is_dir():报错处理方案
- 绑定授权时出现“请求来源产品与授权产品不一致”解决方案
- “未找到admin源码所在目录”的解决方案
- 页面装修本地开发环境配置
- 接口请求错误处理方案
- 未获取到授权信息问题处理方案
- 腾讯地图配置
- 请求超时问题处理方案
- 下载应用时提示找不到zip解决方案
- 怎么关闭开发调试模式
- 获取数据失败问题处理方案
- 框架安装后,访问域名无法进入admin端(多数发生在本地)
- 底部导航失效问题
- 开放平台小程序审核通过发布失败问题
- 先升级插件后升级框架,导致云编译报debounce的错误
- 微信公众号自动回复不通
- 如何修改访问域名默认跳转端口
- 插件与框架的版本兼容问题处理方案
- 升级提示mkdir()处理方案
- 云编译时node.js内存不足导致内存溢出处理方案
- 报错Allowed memory size of ** bytes exhausted (tried to allocate ** bytes)处理方法
- 代码生成器
- niucloud (服务端)
- admin (后台管理端)
- uni-app(手机端前端)
- web端(PC前端)
- api接口
- 配置手册
计划任务
简介
过去,你可能需要在服务器上为每一个调度任务去创建 Cron 条目。因为这些任务的调度不是通过代码控制的,你要查看或新增任务调度都需要通过 SSH 远程登录到服务器上去操作,使用起来不是很方便。
现在你可以通过项目内置的任务调度器在项目中清晰明了地实现计划任务。
1.定义任务模板及任务类
你可以在 \niucloud\app\dict\schedule\schedule.php 类中新增任务项 在开始之前,我们来看一个例子:我们计划每天凌晨一点二十分执行一个订单关闭的任务:
<?php
return [
[
'key' => 'order_close',//任务标识
'name' => '未支付订单自动关闭',//任务名称
'desc' => '',//任务介绍
'time' => [
'type' => 'day',//任务调度频率类型
'day' => 1,//每隔几日
'hour' => 1,//当日执行时间具体小时数
'min' => 20,//当日执行时间具体分钟数
],
'class' => '',
'function' => ''
]
];
-
key值代表任务模板的标识,必须是惟一的。
-
name 任务名称。
-
time任务频率间隔
-
class 任务消费层所在类的路径,如果为空的话会自动在niucloud\app\job\schedule\路径下寻找当前任务key值下划线转驼峰的类
-
function任务调用方法
任务调度频率类型
time 下的type代表任务的调度频率
-
type为min,min为1表示每分钟运行一次任务
-
type为hour,hour为1 min为1表示每隔一小时的第几分钟运行一次任务
-
type为day,day为1 hour为1 min为1表示每隔一日的1时1分运行一次任务
-
type为week,week为1 hour为1 min为1表示每周周一的1时1分运行一次任务
-
type为month,day为1 hour为1 min为1表示每月一号的1时1分运行一次任务
任务模板class值(任务消费类的位置)和function(方法名)
任务消费类所在位置,默认可以为空,如果为空的话会自动在niucloud\app\job\schedule\路径下寻找当前任务key值下划线转驼峰的类,如果不为空的话
- class值如果为空的话自动在niucloud\app\job\schedule\路径下寻找当前任务key值下划线转驼峰的类
<?php
return [
[
'key' => 'order_close',//任务标识
'name' => '未支付订单自动关闭',//任务名称
'desc' => '',//任务介绍
'time' => [
'type' => 'day',//任务调度频率类型
'day' => 1,//每隔几日
'hour' => 1,//当日执行时间具体小时数
'min' => 20,//当日执行时间具体分钟数
],
'class' => '',
'function' => ''
]
];
如果OrderClose类不存在,就在niucloud\app\job\schedule\路径下创建一个OrderClose类
<?php
namespace app\job\schedule;
use core\base\BaseJob;
use think\facade\Log;
/**
* 队列异步调用定时任务
*/
class OrderClose extends BaseJob
{
public function doJob()
{
//具体的任务代码
//......
return true;
}
}
2.class值如果存在值的话,会直接通过class路径去直接寻找任务类
<?php
return [ [ 'key' => 'order_close',//任务标识 'name' => '未支付订单自动关闭',//任务名称 'desc' => '',//任务介绍 'time' => [ 'type' => 'day',//任务调度频率类型 'day' => 1,//每隔几日 'hour' => 1,//当日执行时间具体小时数 'min' => 20,//当日执行时间具体分钟数 ], 'class' => 'app\job\schedule\OrderClose1', 'function' => '' ] ];
namespace app\job\schedule;
use core\base\BaseJob;
use think\facade\Log;
/**
* 队列异步调用定时任务
*/
class OrderClose1 extends BaseJob
{
public function doJob()
{
//具体的任务代码
//......
return true;
}
}
3.function值如果为空值的话会默认调用doJob方法
<?php
return [ [ 'key' => 'order_close',//任务标识 'name' => '未支付订单自动关闭',//任务名称 'desc' => '',//任务介绍 'time' => [ 'type' => 'day',//任务调度频率类型 'day' => 1,//每隔几日 'hour' => 1,//当日执行时间具体小时数 'min' => 20,//当日执行时间具体分钟数 ], 'class' => '', 'function' => '' ] ];
namespace app\job\schedule;
use core\base\BaseJob;
use think\facade\Log;
/**
* 队列异步调用定时任务
*/
class OrderClose extends BaseJob
{
public function doJob()
{
//具体的任务代码
//......
return true;
}
}
4.function值如果不为空值的话会在class类内部直接调用
<?php
return [ [ 'key' => 'order_close',//任务标识 'name' => '未支付订单自动关闭',//任务名称 'desc' => '',//任务介绍 'time' => [ 'type' => 'day',//任务调度频率类型 'day' => 1,//每隔几日 'hour' => 1,//当日执行时间具体小时数 'min' => 20,//当日执行时间具体分钟数 ], 'class' => '', 'function' => 'doJob1' ] ];
<?php namespace app\job\schedule;
use core\base\BaseJob; use think\facade\Log;
/**
*队列异步调用定时任务
*/
class OrderClose extends BaseJob
{
public function doJob1()
{
//具体的任务代码
//......
return true;
}
}
2.添加计划任务到数据库
任务添加到模板之后,这时候任务还不能使用,还需要将任务模板写入到数据库中
- 进入应用 - 开发 - 计划任务

2点击添加任务,选择之前添加的任务模板,然后选择任务调度频率,点击确认任务就添加成功了

3.运行计划任务
- 直接在终端运行命令
php think cron:schedule
2结合项目所在服务器系统的计划任务来使用
* * * * cd /您的项目路径 && php think cron:run >> /dev/null 2>&1
4.调试完毕后,可以使用 Supervisor 来保持队列的进程常驻。
参考配置:
[program:cron-schedule ]
command=php think cron:schedule
directory=/www/wwwroot/您的项目路径/
user=www
priority=999
numprocs=1
也可以配合宝塔使用
:-: 若有收获,就点个赞吧