一、任务调度简介
在过去,您可能为服务器上需要调度的每个任务编写了 cron 配置项。然而,这很快就会变成痛苦,因为您的任务调度不再在源代码控制中,您必须 SSH 登录到您的服务器查看现有的 cron 项或添加额外的项。 Laravel 的命令调度器提供了一种全新的方法来管理服务器上的定时任务。调度器允许您在 Laravel 应用程序本身中流畅且有表达力地定义命令调度。使用调度器时,您的服务器上只需要一个单一的 cron 条目。您的任务调度通常在应用程序的 routes/console.php 文件中定义。
二、任务调度定义方法一
您可以在应用程序的 routes/console.php 文件中定义所有的调度任务。让我们从一个示例开始,我们将安排一个闭包在每天午夜被调用。在闭包中,我们将执行一个数据库查询来清空一个表:
<?php use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schedule; Schedule::call(function () { DB::table('recent_users')->delete(); })->daily();
二、任务调度定义方法二
1、除了使用闭包调度,您还可以调度 可调用对象。可调用对象是包含 __invoke 方法的简单 PHP 类:
在项目下的app\Http\Schedule新建一个DeleteRecentUsers.php,编写如下代码
<?php namespace App\Http\Schedule; use Illuminate\Support\Facades\DB; class DeleteRecentUsers { public function __invoke() { DB::table('recent_users')->delete(); } } ?>
2、引入类文件:在项目根目录下的composer.json加入 "app/Http/Schedule",代码
"autoload": { "classmap": [ "app/Http/Schedule" ], "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } },
3、执行加载:执行composer dumpautoload 执行加载,使其生效
composer dumpautoload
4、调用:在routes/console.php调用
<?php use Illuminate\Foundation\Inspiring; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Schedule; Artisan::command('inspire', function () { $this->comment(Inspiring::quote()); })->purpose('Display an inspiring quote')->hourly(); Schedule::call(new \App\Http\Schedule\DeleteRecentUsers)->everySecond();
5、执行任务调度
php artisan schedule:run
文章评论(0)