Laravel任务调度
* * * * * 位置/php 位置/artisan schedule:run >> /dev/null 2>&1 唯一增加的计划任务
增加任务调度文件
php artisan make:console 类名 --command=xzj:test
xzj:test 这个是控制台执行的命令-----相当于标识
description 这个是存储命令描述
handle 方法里面是存储的运行操作---可以调用模型乱七八糟的,反正就是想怎么写怎么写
调度常用选项
当然,你可以分配多种调度到任务:
方法
|
描述
|
->cron('* * * * *');
|
在自定义Cron调度上运行任务
|
->everyMinute();
|
每分钟运行一次任务
|
->everyFiveMinutes();
|
每五分钟运行一次任务
|
->everyTenMinutes();
|
每十分钟运行一次任务
|
->everyFifteenMinutes();
|
每十五分钟运行一次任务
|
->everyThirtyMinutes();
|
每三十分钟运行一次任务
|
->hourly();
|
每小时运行一次任务
|
->hourlyAt(17);
|
每小时第十七分钟运行一次任务
|
->daily();
|
每天凌晨零点运行任务
|
->dailyAt('13:00');
|
每天13:00运行任务
|
->twiceDaily(1, 13);
|
每天1:00 & 13:00运行任务
|
->weekly();
|
每周运行一次任务
|
->monthly();
|
每月运行一次任务
|
->monthlyOn(4, '15:00');
|
每月4号15:00运行一次任务
|
->quarterly();
|
每个季度运行一次
|
->yearly();
|
每年运行一次
|
->timezone('America/New_York');
|
设置时区
|
在运行命令前需要将其注册到
App\Console\Kernel
的
$commands
属性中:
schedule方法中编写任务调度
//方法一:
// $schedule->call(function (){
// Log::info('任务调度一:闭包形式');
// })->everyMinute();
//方法二37 $schedule->command('xzj:test')->everyMinute();
一次性测试
在控制台上执行Artisan命令:
php artisan xzj:test
例如:你想执行单独的xzj:test命令
* * * * * 路径/php /路径/artisan xzj:test >> /dev/null 2>&1
Thinkphp程序调度
第一步:在application/api里创建command目录里面新建UpOrder.php
内容如下:
<?php
/**
* Created by PhpStorm.
* User: apple
* Date: 2018/9/7
* Time: 下午7:30
*/
namespace app\api\command;
use think\facade\Log;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use app\api\model\Order;
use app\api\model\Task;
class UpOrder extends Command
{
protected function configure(){
$this->setName('UpOrder')->setDescription("更新订单");
}
protected function execute(Input $input, Output $output){
$time = time() - 3600;
$order = Order::where('status',0)->field('id,status,get_at,task_id,stage')->select();
foreach ($order as $k => $v)
{
if($v['get_at'] < $time )
{
$v->status = 3;
$v->finish_at = time();
if($v['stage'] === 0){
$task = Task::get($v['task_id']);
$task->left_number = $task['left_number'] + 1;
$task->get_number = $task['get_number'] - 1;
if($task->save()){
Log::write('任务'.$task['id'].'数量更新成功','info');
}
}
if($v->save()){
Log::write('订单'.$v['id'].'超时','info');
}
}
}
}
}
此处execute方法里内容为设定的定时任务。
第二步:在application里command.php文件里加上如下内容:
return [
'app\api\command\UpOrder'
];
第三步:通过cmd命令窗口进入项目根路径里:
执行crontab -e命令进入编辑状态:加上* * * * * /usr/bin/php /Users/php/wall/think UpOrder
测试
php think 文件名
##小菜鸡一枚,如有什么地方错误的,欢迎前来指教,虚心学习~