Laravel-任务调度

来源:互联网 发布:清华 知乎 编辑:程序博客网 时间:2024/05/19 07:10

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 方法中。在开始之前,先让我们来看看一个任务的调度示例。在该例子中,我们计划了一个会在每分钟被调用的闭包。该闭包将插入一条数据:

<?phpnamespace 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 时才运行。


原创粉丝点击