Laravel - Crontab

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel - Crontab相关的知识,希望对你有一定的参考价值。

Laravel 任务调度,可以很方便的实现和处理系统定时任务。


调度列表

现已有的调度任务

php artisan schedule:list

生成调度

在控制台核心配置文件 /app/Console/Kernel.php 的 schedule 方法中,定义调度:

<?php
//调度一个回调函数
$schedule->call(function() //... )->daily();

//调度类,需要实现 __invoke 方法
$schedule->call(new __Invokeable())->daily();

//调度 artisan 命令
$schedule->command(emails:send Taylor --force)->daily();

//调度 command 类
$schedule->command(SendEmailsCommand::class, [Taylor, --force])->daily();

//调度 shell 命令
$schedule->exec(node /home/forge/script.js)->daily();

//调度队列任务
$schedule->job(new Heartbeat, heartbeats, sqs)->everyFiveMinutes();


运行调度

php artisan schedule:work


调度频率

使用方法

<?php
$schedule->call(function ()
//..
)->weekly()->mondays()->at(13:00);

可选频率

->cron(* * * * *);

自定义 Cron 计划执行任务

->everyMinute();

每分钟执行一次任务

->everyTwoMinutes();

每两分钟执行一次任务

->everyThreeMinutes();

每三分钟执行一次任务

->everyFourMinutes();

每四分钟执行一次任务

->everyFiveMinutes();

每五分钟执行一次任务

->everyTenMinutes();

每十分钟执行一次任务

->everyFifteenMinutes();

每十五分钟执行一次任务

->everyThirtyMinutes();

每三十分钟执行一次任务

->hourly();

每小时执行一次任务

->hourlyAt(17);

每小时第十七分钟时执行一次任务

->everyTwoHours();

每两小时执行一次任务

->everyThreeHours();

每三小时执行一次任务

->everyFourHours();

每四小时执行一次任务

->everySixHours();

每六小时执行一次任务

->daily();

每天 00:00 执行一次任务

->dailyAt(13:00);

每天 13:00 执行一次任务

->twiceDaily(1,13);

每天 01:00 和 13:00 各执行一次任务

->weekly();

每周日 00:00 执行一次任务

->weeklyOn(1,8:00);

每周一 08:00 执行一次任务

->monthly();

每月第一天 00:00 执行一次任务

->monthlyOn(4,15:00);

每月第四天 15:00 执行一次任务

->twiceMonthly(1,16,13:00);

每月第一天和第 十六天的 13:00 各执行一次任务

->lastDayOfMonth(15:00);

每月最后一天 15:00 执行一次任务

->quarterly();

每季度第一天 00:00 执行一次任务

->yearly();

每年第一天 00:00 执行一次任务

->yearlyOn(6,1,17:00);

每年六月第一天 17:00 执行一次任务

->timezone(America/New_York);

设置时区

避免重复:如果之前调度时的任务还在执行,就不会执行

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

过期时长

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

单机模式

$schedule->command(report:generate)
->fridays()
->at(17:00)
->onOneServer();

后台运行

$schedule->command(analytics:report)
->daily()
->runInBackground();

维护模式

$schedule->command(emails:send)->evenInMaintenanceMode();

输出任务

$schedule->command(emails:send)
->daily()
// ->sendOutputTo($filePath);
// ->appendOutputTo($filePath);
// ->emailOutputTo(taylor@example.com);
// ->emailOutputOnFailure(taylor@example.com); //失败时发送

前后钩子

$schedule->command(emails:send)
->daily()
->before(function ()
// 任务即将执行。。。
)
->after(function ()
// 任务已经执行。。。
);

前后Ping

$schedule->command(emails:send)
->daily()
->pingBefore($url)
->thenPing($url);
$schedule->command(emails:send)
->daily()
->pingOnSuccess($successUrl)
->pingOnFailure($failureUrl);
$schedule->command(emails:send)
->daily()
->pingBeforeIf($condition, $url)
->thenPingIf($condition, $url);

成败钩子

$schedule->command(emails:send)
->daily()
->onSuccess(function ()
// 任务执行成功。。。
)
->onFailure(function ()
// 任务执行失败。。。
);

以上是关于Laravel - Crontab的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Carbon 获取上个月的第一天和最后一天 - Laravel

每天和每半小时重复一次 UNNotifications

如何生成周表并按天和小时拆分

[转帖]crontab每小时运行一次

Laravel - Crontab

crontab 每小时执行