laravel5.5下创建及执行定时任务的步骤过程是怎样
Admin 2022-06-13 群英技术资讯 882 次浏览
关于“laravel5.5下创建及执行定时任务的步骤过程是怎样”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。一、准备环境
服务器:linux(debian)+nginx+mysql+php 环境
框架:laravel 5.5 (确认能跑通)
需求:每天晚上1点执行定时操作
二、定时任务的步骤
1、根据文档,创建命令
首先进入到laravel/app/console 目录下,Console 目录包含应用所有自定义的 Artisan 命令,这些命令类可以使用 make:command 命令生成。该目录下还有 Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。
例如我们创建一个定时任务,名称为Test:
//这里使用laravel给定的 php artisan来生成命令,此处的Test就是我们要生成的文件 //这里的artisan代表的不仅仅是laravel自带的命令,他其实是laravel下的artisan目录,因为这个目录没有x,也就是可执行权限,所以不能使用 ./artisan 来执行,只能通过php来执行 php artisan make:command Test
2、创建完之后,打开console目录下的commands目录,我们会发现里面已经有了一个文件
大致的代码如下:
<?php
namespace App\Console\Commands;
use App\Services\CalculateDataService;
use Illuminate\Console\Command;
class Test extends Command
{
//此处代表laravel自动生成的名称,下面执行的时候能用到
protected $signature = 'test:data';
//此处代表的是描述,并没有什么用的
protected $description = 'test data';
/**
* 计算数据服务的 service 属性
*这里由于要用到我们的逻辑,所以提前定义一下,方便下面使用
* @var CalculateDataService
*/
protected $service;
//这个是laravel自带的构造方法。初始状态下是空的。
//我这里由于要调用CalculateDataService 类的一个方法,所有就用依赖注入的方式引入了一下。
public function __construct(CalculateDataService $service)
{
parent::__construct();
$this->service = $service;
}
/**
* Execute the console command.
*这里就是我们执行操作的地方,里面是command要处理的业务。根据我们的需求,
*调用类中的calculateData()方法,该方法是我们自己的需求逻辑部分。
* @return mixed
*/
public function handle()
{
try {
$this->service->calculateData();
} catch (\Exception $e) {
$this->error($e->getMessage());
}
// line()方法是command类中自带的方法,可以输出我们自定义的信息
$this->line('calculate Data Success!');
}
}
3、定时命令创建好之后,我们需要修改kernel.php文件
kernel.php文件里面,主要是定义命令的调度时间,定义命令的执行先后顺序等。
这部分参考laravel官方文档:
http://laravelacademy.org/post/8484.html
4、我的kernel.php文件
<?php
//此处省略了命名空间部分
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*注:此处是引入我们新创建的类。由于我们此处是使用命令名来操作的,所以没用上这个类名。不过还是引入比较标准
* 可以使用 command 方法通过命令名或类来调度一个 Artisan 命令:
* $schedule->command('emails:send --force')->daily();
* $schedule->command(EmailsCommand::class, ['--force'])->daily();
*
* @var array
*/
protected $commands = [
Test::class,
CalculateData::class,
UpdateOffset::class,
];
/**
* Define the application's command schedule.
* 注:
* 1、这个方法按照自己的需求,确定定时方法的执行顺序。通过after,before等关键词来控制
* 2、此处相当于规定同意的定时执行时间,如都在0:30分执行下面的几个定时任务
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// 每天凌晨 0.45 执行同步 aliyun 数据的任务,并发送邮件给 ***
$schedule->command('iot:sync Flow')
->after(function() {
//更新偏移量,after里面不能加参数
Artisan::call('Test:data');
})
->after(function () {
// 执行同步数据命令完成后 则执行计算数据任务
Artisan::call('calculate:data');
});
}
/**
* Register the commands for the application.
* //这个部分是laravel自动生成的,引入我们生成的命令文件
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
关于具体的调度方法schedule(),大家可以去laravel文档看看,里面可以规定很多东西。我这边是使用的钩子函数。在同时要执行多个定时任务的时候,通过after,before等方法,可以让多个定时任务变得有序起来。
三、执行我们的定时
虽然laravel的定时任务一直都说的很强大,但本质上还是离不开服务器上的cron脚本。。
1、先查看服务器上的定时条目
crontab -l
2、新增或编辑cron 条目
crontab -e
3、在里面新增我们写好的方法路径

这里面新加上我们的定时任务。
第一是 规定定时任务的执行时间
第二是 要把项目的artisan目录路径写对
第三 schedule:run就是执行咱们之前写的任务调度,也就是kernel.php文件中的schedule方法。
如果是大家自己测试的话,可以随便写个定时任务,每分钟执行以下,这样就能准确的知道自己的定时任务是否正确了。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
不管是动态还是静态页面,最终的效果都是要呈现在前端进行访问,而静态页面和动态页面的处理方法是不一样的,今天小编就为大家带来了PHP开发中动态页面生成静态页面的三种常用方法,希望能为大家带来帮助。
在我们日常的程序开发时候,有时候需要对一个已知的集合按照一定的规则进行排序,其实当数据的规模不太大时或者数据的有序特征比较明显,其实我们可以采用其它的排序算法例如:BubbleSort,InsertionSort, ShellSort等。但是前面3中算法的共同特点是,都是从原始的列表里把元素两两取出,然后进行比较,显然冒泡排序和插入排序使用了太多的比较,在数据规模增大时,优势明显下
这篇文章主要介绍了Yii框架模拟组件调用注入,结合实例形式分析了Yii框架存储服务功能组件与调用相关操作技巧,需要的朋友可以参考下
PHP中的变量覆盖是怎么回事,如何进行漏洞修复?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
从4.0版本开始Swoole提供了完整的协程(Coroutine)+通道(Channel)特性,带来全新的CSP编程模型。Swoole提供了异步任务处理的功能,可以投递一个异步任务到TaskWorker进程池中执行,不影响当前请求的处理速度
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008