Laravel-任务调度

Laravel 命令调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义,并且仅需要在服务器上增加一条 Cron 项目即可。

你的调度已经定义在 app/Console/Kernel.php 文件的 schedule 方法中。为了方便你开始,在该方法内包含了一个简单的例子。你可以随意增加调度到 Schedule 对象中。

1、唯一一个需要加入到服务器的 Cron 项目(注意这里path为项目绝对路径):

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
e.g. * * * * * php /home/vagrant/Code/test/artisan schedule:run >> /dev/null 2>&1

2、你可以将所有的计划任务定义在 App\Console\Kernel 类的 schedule 方法中。在开始之前,先让我们来看看一个任务的调度示例。在该例子中,我们计划了一个会在每分钟被调用的闭包。该闭包将插入一条数据:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;

class Kernel extends ConsoleKernel
{
    protected $commands = [
        Commands\Inspire::class,
    ];

    /**
     * 在这里定义你的计划任务
     */
    protected function schedule(Schedule $schedule)
    {
        //每分钟添加一条数据
        $schedule->call(function () {
            $data = [
                'name'=>'myname'.rand(2,100),
                'email'=>'myname'.rand(2,100).'@126.com',
                'password'=>bcrypt('123456'),
            ];
            DB::table('users')->insert($data); 
        })->everyMinute();
        
        
    }
}

调度频率设置#

当然,你可以针对你的任务来分配多种调度计划:

方法描述
->cron('* * * * * *');在自定义的 Cron 调度运行该任务
->everyMinute();每分钟运行该任务
->everyFiveMinutes();每五分钟运行该任务
->everyTenMinutes();每十分钟运行该任务
->everyThirtyMinutes();每三十分钟运行该任务
->hourly();每小时运行该任务
->daily();每天午夜运行该任务
->dailyAt('13:00');每天的 13:00 运行该任务
->twiceDaily(1, 13);每天的 1:00 及 13:00 运行该任务
->weekly();每周运行该任务
->monthly();每月运行该任务
->yearly();每年运行该任务

这些方法可以合并其它限制条件以生成更精确的调度。例如在某周的某几天运行调度。举个例子,计划一个每周周一的调度:

$schedule->call(function () {
    // 在每个礼拜一的 13:00 运行一次...
})->weekly()->mondays()->at('13:00');

下方列出其它额外限制条件:

方法描述
->weekdays();限制任务在工作日
->sundays();限制任务在星期日
->mondays();限制任务在星期一
->tuesdays();限制任务在星期二
->wednesdays();限制任务在星期三
->thursdays();限制任务在星期四
->fridays();限制任务在星期五
->saturdays();限制任务在星期六
->when(Closure);限制任务基于一个为真的验证;
为真验证限制条件#

when 方法可以用来判断是否要运行任务,主要基于一个指定的为真验证的运行结果。换句话说,如果指定的 闭包返回 true,且没有其它限制条件存在,那么这个任务将会被继续运行。

$schedule->command('emails:send')->daily()->when(function () {
    return true;
});

当链式调用了 when 方法时,计划命令只有在所有的 when 条件返回 true 时才运行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值