关于laravel5.5的定时任务详解(demo)
Laravel  /  管理员 发布于 8年前   221
一、准备环境 服务器:linux(debian)+nginx+mysql+php 环境 框架:laravel 5.5 (确认能跑通) 需求:每天晚上1点执行定时操作 二、定时任务的步骤 1、根据文档,创建命令 首先进入到laravel/app/console 目录下,Console 目录包含应用所有自定义的 Artisan 命令,这些命令类可以使用 make:command 命令生成。该目录下还有 Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。 例如我们创建一个定时任务,名称为Test: 2、创建完之后,打开console目录下的commands目录,我们会发现里面已经有了一个文件 大致的代码如下: 3、定时命令创建好之后,我们需要修改kernel.php文件 kernel.php文件里面,主要是定义命令的调度时间,定义命令的执行先后顺序等。 这部分参考laravel官方文档: http://laravelacademy.org/post/8484.html 4、我的kernel.php文件 关于具体的调度方法schedule(),大家可以去laravel文档看看,里面可以规定很多东西。我这边是使用的钩子函数。在同时要执行多个定时任务的时候,通过after,before等方法,可以让多个定时任务变得有序起来。 三、执行我们的定时 虽然laravel的定时任务一直都说的很强大,但本质上还是离不开服务器上的cron脚本。。 1、先查看服务器上的定时条目 2、新增或编辑cron 条目 3、在里面新增我们写好的方法路径 这里面新加上我们的定时任务。 第一是 规定定时任务的执行时间 第二是 要把项目的artisan目录路径写对 第三 schedule:run就是执行咱们之前写的任务调度,也就是kernel.php文件中的schedule方法。 如果是大家自己测试的话,可以随便写个定时任务,每分钟执行以下,这样就能准确的知道自己的定时任务是否正确了。 以上这篇关于laravel5.5的定时任务详解(demo)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。//这里使用laravel给定的 php artisan来生成命令,此处的Test就是我们要生成的文件//这里的artisan代表的不仅仅是laravel自带的命令,他其实是laravel下的artisan目录,因为这个目录没有x,也就是可执行权限,所以不能使用 ./artisan 来执行,只能通过php来执行php artisan make:command Test
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!'); }}
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'); }}
crontab -l
crontab -e
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号