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的主要内容,如果未能解决你的问题,请参考以下文章