美文网首页laravel
laravel之任务调度

laravel之任务调度

作者: 空气KQ | 来源:发表于2018-05-18 14:41 被阅读99次

之前执行任务定时,都会用linux的crontab,现在框架用一条就可以帮你去执行了

增加定时

crontab -e
* * * * * php /www/laravel52/artisan schedule:run >>  /dev/null 2>&1

定义调度

场景:订单未支付15分钟的关闭支付状态,支付成功的,发送消息通知等

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use DB;
use Log;
class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *这里将你的artisan命令的类引入下面的数组里面
     * @var array
     */
    protected $commands = [
        // Commands\Inspire::class,
    ];

    /**
     * Define the application's command schedule.
     *调度任务编写函数
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
      //定义每分钟写入用户表
       $schedule->call(function () {
          DB::table('users')->insert(['name'=>'kongqi'.str_random(),'email'=>str_random()]);
        })->everyMinute();
    }
}

执行artisan命令

前面将命令类引入到$commands这个数组里面

$schedule->command('emails:send --force')->everyMinute();

发送命令到操作系统

$schedule->exec('node /home/forge/script.js')->daily();

定时器

方法 描述
->cron('* * * * *'); 在自定义Cron调度上运行任务
->everyMinute(); 每分钟运行一次任务
->everyFiveMinutes(); 每五分钟运行一次任务
->everyTenMinutes(); 每十分钟运行一次任务
->everyThirtyMinutes(); 每三十分钟运行一次任务
->hourly(); 每小时运行一次任务
->daily(); 每天凌晨零点运行任务
->dailyAt('13:00'); 每天13:00运行任务
->twiceDaily(1, 13); 每天1:00 & 13:00运行任务
->weekly(); 每周运行一次任务
->monthly(); 每月运行一次任务
->quarterly(); 每个季度运行一次
->yearly(); 每年运行一次
$schedule->call(function () {
    // 每周星期一13:00运行一次...
})->weekly()->mondays()->at('13:00');
方法 描述
->weekdays(); 只在工作日运行任务
->sundays(); 每个星期天运行任务
->mondays(); 每个星期一运行任务
->tuesdays(); 每个星期二运行任务
->wednesdays(); 每个星期三运行任务
->thursdays(); 每个星期四运行任务
->fridays(); 每个星期五运行任务
->saturdays(); 每个星期六运行任务
->when(Closure); 基于特定测试运行任务

额外的调度约束列表:

方法 描述
->weekdays(); 只在工作日运行任务
->sundays(); 每个星期天运行任务
->mondays(); 每个星期一运行任务
->tuesdays(); 每个星期二运行任务
->wednesdays(); 每个星期三运行任务
->thursdays(); 每个星期四运行任务
->fridays(); 每个星期五运行任务
->saturdays(); 每个星期六运行任务
->when(Closure); 基于特定测试运行任务

根据条件

//如果给定闭包返回true,只要没有其它约束条件阻止任务运行,该任务就会执行
$schedule->command('emails:send')->daily()->when(function () {
    return true;
});

reject方法和when相反

避免任务重叠

默认情况下,即使前一个任务仍然在运行调度任务也会运行
现在使用withoutOverlapping可以让前面执行完,后面才执行

$schedule->command('emails:send')->withoutOverlapping();

任务输出到文件

之对command命令生效,call不生效

$schedule->command('emails:send')
         ->daily()
         ->sendOutputTo($filePath);

追加输出到给定文件

$schedule->command('emails:send')
         ->daily()
         ->appendOutputTo($filePath);

发送到电子邮件

$schedule->command('foo')
         ->daily()
         ->sendOutputTo($filePath)
         ->emailOutputTo('foo@example.com');

任务钩子

使用before和after方法,你可以指定在调度任务完成之前和之后要执行的代码

$schedule->command('emails:send')
         ->daily()
         ->before(function () {
             // Task is about to start...
         })
         ->after(function () {
             // Task is complete...
         });

ping URL
使用pingBefore和thenPing方法,调度器可以在任务完成之前和之后自动ping给定的URL

$schedule->command('emails:send')
         ->daily()
         ->pingBefore($url)
         ->thenPing($url);

相关文章

  • laravel之任务调度

    之前执行任务定时,都会用linux的crontab,现在框架用一条就可以帮你去执行了 增加定时 定义调度 场景:订...

  • Laravel 任务调度问题

    换地方了 Laravel 任务调度问题

  • laravel 任务调度

    1.在代码里面写调度任务,在Console文件夹下面Kernel.php写调取任务命令 2.在Commands文件...

  • laravel 任务调度

    创建定时任务文件 编辑文件内容 修改Kernel 文件 添加定时任务

  • laravel任务调度

    crontab -e #添加代码 * * * * * /usr/bin/php7.0 /var/www/html/...

  • laravel 调度任务

    larave 一直是国内外备受欢迎的框架,功能强大、结构优雅,其中 artisan 命令 也一直备受青睐。接下来就...

  • laravel任务调度

    1.创建定时任务 编写以下cron语句: /usr/bin/php为PHP路径,/www/wwwroot/guxi...

  • 30. 配置 Cron 调度器

    Laravel 提供了便利的方式来调度 Cron 任务,通过Artisan 命令 schedule:run ,调度...

  • Laravel 任务调度 ( Console )

    在以前, 开发者需要为每一个需要调度的任务编写一个 Cron 条目, 这是很让人头疼的事. 你的任务调度不在源码控...

  • laravel 任务调度实例

    导语 之前写过使用 Linux 的进行定时任务,实际上 laravel 也可以执行定时任务。需求是统计每日访问的 ...

网友评论

    本文标题:laravel之任务调度

    本文链接:https://www.haomeiwen.com/subject/uojgdftx.html