过去,你可能需要在服务器上为每一个调度任务去创建 Cron 条目。因为这些任务的调度不是通过代码控制的,你要查看或新增任务调度都需要通过 SSH 远程登录到服务器上去操作,使用起来不是很方便。
现在你可以通过项目内置的任务调度器在项目中清晰明了地实现计划任务。
你可以在 \niucloud\app\dict\schedule\schedule.php 类中新增任务项 在开始之前,我们来看一个例子:我们计划每天凌晨一点二十分执行一个订单关闭的任务:
<?php
return [
[
'key' => 'order_close',//任务标识
'name' => '未支付订单自动关闭',//任务名称
'desc' => '',//任务介绍
'time' => [
'type' => 'day',//任务调度频率类型
'day' => 1,//每隔几日
'hour' => 1,//当日执行时间具体小时数
'min' => 20,//当日执行时间具体分钟数
],
'class' => '',
'function' => ''
]
];
time 下的type代表任务的调度频率
任务消费类所在位置,默认可以为空,如果为空的话会自动在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;
}
}
<?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;
}
}
<?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;
}
}
<?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;
}
}
任务添加到模板之后,这时候任务还不能使用,还需要将任务模板写入到数据库中


php think workerman
2结合项目所在服务器系统的计划任务来使用
* * * * cd /您的项目路径 && php think cron:run >> /dev/null 2>&1
参考配置:
[program:cron-schedule ]
command=php think cron:schedule
directory=/www/wwwroot/您的项目路径/
user=www
priority=999
numprocs=1
也可以配合宝塔使用
