laravel12如何使用定时任务调度,创建+执行

5天前   阅读:95   类型:后端   分类:Laravel    标签: PHP Laravel

一、任务调度简介

在过去,您可能为服务器上需要调度的每个任务编写了 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

【腾讯云】春季大促,助力开工,2核2G云服务器低至 68元/年

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://tpxhm.com/adetail/1140.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录
简忆博客壁纸一
简忆博客壁纸二
简忆博客壁纸三
简忆博客壁纸四
简忆博客壁纸五
简忆博客壁纸六
简忆博客壁纸七
简忆博客壁纸八
头像

简忆博客
勤于学习,乐于分享

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×