Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Laravel-任务调度

Laravel-任务调度

作者头像
全栈程序员站长
发布于 2022-07-08 04:40:24
发布于 2022-07-08 04:40:24
2K00
代码可运行
举报
运行总次数:0
代码可运行

简介 Cron 是 UNIX、SOLARIS、LINUX 下的一个十分有用的工具,通过 Cron 脚本能使计划任务定期地在系统后台自动运行。这种计划任务在 UNIX、SOLARIS、LINUX下术语为 Cron Jobs。Crontab 则是用来记录在特定时间运行的 Cron 的一个脚本文件,Crontab 文件的每一行均遵守特定的格式:

我们可以在服务器上通过 crontab -e 来新增或编辑 Cron 条目,通过 crontab -l 查看已存在的 Cron 条目。更多关于 Cron 的原理和使用细节请自行百度或 Google。

在以前,开发者需要为每一个需要调度的任务编写一个 Cron 条目,这是很让人头疼的事。你的任务调度不在源码控制中,你必须使用 SSH 登录到服务器然后添加这些 Cron 条目。

Laravel 命令调度器允许你流式而又不失优雅地在 Laravel 中定义命令调度,并且服务器上只需要一个 Cron 条目即可。任务调度定义在 app/Console/Kernel.php 文件的 schedule 方法中,该方法中已经包含了一个示例。

开启调度器 下面是你唯一需要添加到服务器的 Cron 条目,如果你不知道如何添加 Cron 条目到服务器,可以考虑使用诸如 Laravel Forge 这样的服务来为管理 Cron 条目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

该 Cron 将会每分钟调用一次 Laravel 命令调度器,当 schedule:run 命令执行后,Laravel 评估你的调度任务并运行到期的任务。

1 添加Cron到服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab -e 进入编辑模式 添加下面的内容:

* * * * * /usr/local/php/bin/php /home/wwwroot/web.laravel.cn/artisan schedule:run >> /dev/null 2>&1

* * * * *  时间
/usr/local/php/bin/php  : 你自己php的环境     [whereis php]
/home/wwwroot/web.laravel.cn/artisan    : artsian目录
schedule:run >> /dev/null 2>&1  : 固定写法

2 创建文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php artisan make:console LogInfo [自定义文件名] 如果报错则运行 php artisan make:command 
=======================================================================================================================

在以前, 开发者需要为每一个需要调度的任务编写一个 Cron 条目, 这是很让人头疼的事. 你的任务调度不在源码控制中, 你必须使用 SSH 登录到服务器然后添加这些 Cron 条目. Laravel 命令调度器允许你平滑而又富有表现力地在 Laravel 中定义命令调度, 并且服务器上只需要一个 Cron 条目即可, 任务调度又是我们俗称的 “计划任务”

任务调度定义在 app/Console/Kernel.php 文件的 schedule 方法中, 该方法中已经包含了一个示例. 你可以自由地添加你需要的调度任务到Schedule 对象

开启调度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 在 linux 环境中执行
* * * * * root php /var/www/laravel/artisan schedule:run

/var/www/laravel 为你的项目目录, 该 Cron 将会每分钟调用 Laravel 命令调度, 然后 Laravel 评估你的调度任务并运行到期的任务.

定义调度 在 项目根目录 下创建定时任务所需要进行的操作

创建命令 php artisan make:console Stat_Test 该操作会在 app/Console/Commands 下生成一个 Stat_Test.php, 以下是小例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
 
namespace App\Console\Commands;
 
use Illuminate\Console\Command;  
class Stat_Test extends Command  
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'stat:test';
 
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'stat:test';
 
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
 
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->addData();
    }
 
    // 例子
    public function addData() {
        $time = time();
        $rand = rand(1, 1000);
        $id = \DB::table('data_test')->insertGetId(['uuid' => $time, 'uuid' => $rand]);
       if ($id) {
          \Log::info('定时/数据插入成功', $id);
       } else {
          \Log::error('定时/数据插入失败', $time);
       }
   }
}

值得注意的是 这个文件中的 $signature = ‘stat:test’ 这个签名在 Kernel.php 中也要相应用到, 下面是附上 Kernel.php 的完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
 
namespace App\Console;
 
use Illuminate\Console\Scheduling\Schedule;  
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
 
class Kernel extends ConsoleKernel  
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\Inspire::class,
        '\App\Console\Commands\Stat_Test',
    ];
 
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
       //  为测试方便 每分钟执行一次
        $schedule->command('stat:test')->everyMinute();
    }
}

再强调一次 $schedule->command(‘stat:test’) 里面的 stat:test 必须和上面的签名 $signature = ‘stat:test’ 对应上

引入调度文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected $commands = [ 
\App\Console\Commands\Inspire::class,
'\App\Console\Commands\Stat_Test',
];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 每周星期六 11:00 运行一次...
$schedule->command('stat:test')->weekly()->saturdays()->at('11:00');

// 每周星期一 01:00 运行一次...
$schedule->command('stat:test')->weekly()->->mondays()->at('01:00');

调度常用选项 当然,你可以分配多种调度到任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
->cron('* * * * *'); 在自定义 Cron 调度上运行任务 
->everyMinute(); 每分钟运行一次任务 
->everyFiveMinutes(); 每五分钟运行一次任务 
->everyTenMinutes(); 每十分钟运行一次任务 
->everyThirtyMinutes(); 每三十分钟运行一次任务 
->hourly(); 每小时运行一次任务 
->daily(); 每天凌晨零点运行任务 
->dailyAt('13:00'); 每天 13:00运行任务 
->twiceDaily(1, 13); 每天 1:00 & 13:00 运行任务 
->weekly(); 每周运行一次任务
->monthly(); 每月运行一次任务

下面是额外的调度约束列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
->weekdays(); 只在工作日运行任务
->sundays(); 每个星期天运行任务
->mondays(); 每个星期一运行任务
->tuesdays(); 每个星期二运行任务
->wednesdays(); 每个星期三运行任务
->thursdays(); 每个星期四运行任务
->fridays(); 每个星期五运行任务
->saturdays(); 每个星期六运行任务
->when(Closure); 基于特定测试运行任务

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112349.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在 Golang 中进行「任务调度」,像用 Laravel 一样丝滑
实现了 Laravel 中大部分的实用方法,持续更新中, 欢迎 star 与 issues。
韩同学的简单逻辑
2022/04/25
3120
在 Golang 中进行「任务调度」,像用 Laravel 一样丝滑
Laravel 任务调度
过去想给一个脚本创建计划任务,得登陆服务器执行crontab -e,或编辑/etc/crontab,每加一个脚本都得重复此步骤。
崔哥
2023/02/27
1.1K0
laravel任务调度的介绍(附代码)
本篇文章给大家带来的内容是关于laravel任务调度的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
叫我可儿呀
2019/11/21
8460
laravel任务调度的介绍(附代码)
Laravel5.5之事件监听、任务调度、队列
你写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例: 利用模型工厂生成30个用户:
唐成勇
2019/05/26
1.4K0
laravel使用scheduler实现计划任务
传统的计划任务是使用linux的crontab,每次对计划任务进行修改都要上服务器处理,不方便且不安全。laravel的命令调度器允许我们通过简单的配置即可实现计划任务功能。
章鱼喵
2019/04/01
1.7K0
laravel使用scheduler实现计划任务
深入理解Laravel定时任务调度机制
一个复杂的web系统后台当中,一定会有很多定时脚本或者任务要跑。例如爬虫系统需要定期去爬取一些网站数据,自动还贷系统需要每个月定时对用户账户扣款结算,会员系统需要定期检测用户剩余会员天数以便及时通知续费等等。Linux系统中内置的crontab一般被广泛地用于跑定时任务。其任务指令格式如下:
horstxu
2019/01/22
10.8K1
深入理解Laravel定时任务调度机制
Redis 分布式锁在 Laravel 任务调度底层实现中的应用
在 Laravel 项目中,我们可以基于任务调度功能非常轻松地管理 Crontab 定时任务,只需在 App\Console\Kernel 的 schedule 方法中定义所有需要调度的任务,类型包括 Artisan 命令、回调函数或者 Shell 脚本等:
学院君
2021/01/12
6.3K0
Redis 分布式锁在 Laravel 任务调度底层实现中的应用
laravel5.5 任务调度 (转载)
我们需要在 App\Console\Kernel 类的 schedule 方法中定义所有任务调度。例如:
lin_zone
2018/08/15
6240
laravel5.5 任务调度 (转载)
基于Laravel Task-Scheduler定时发送邮件小程序
说明:本文主要学习Laravel的Artisan Command、Task Scheduler和Mail相关知识。做一个简单的小demo,用来定时发邮件。。走完整个流程最多只需一小时。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。
botkenni
2022/03/24
1.9K0
基于Laravel Task-Scheduler定时发送邮件小程序
Laravel利用redis和定时任务实现活跃用户统计
最近在Summer的《Laravel教程-Web开发实战进阶》学到很多东西,以前只会看文档,大概了解Laravel的内容而在实际运用中确不知道该怎样做,碰到一个需求不会立马联想到“这个东西可以用...实现“。 不是有句话”实践是检验真理的唯一标准“ 所以学习编程还是要多实践多写项目,不然就像我一样拿到东西不知道怎样运用 废话不多,今天分享一下利用redis和定时任务实现活跃用户统计 如果你对redis和定时任务不了解建议去补一下linux和redis 以及laravel的任务调度
切图仔
2022/09/08
9810
Laravel利用redis和定时任务实现活跃用户统计
30 分钟未付款取消订单,怎么做?
然后修改 app\Console\Commands\OrderCancel.php 为如下:
码农编程进阶笔记
2021/07/20
7790
要在 Laravel 中设置定时任务并使用 PM2 进行管理
使用 php artisan make:command 命令创建一个新的 Artisan 命令,该命令将执行您希望在后台运行的代码。例如,您可能想要每分钟调用一个 API 来更新数据库中的数据。
Bolton
2023/05/31
9220
Laravel Sanctum API 授权
简单来说,前后端分离的项目,使用 token 验证登陆状态,可以选它;另外,同类型的还有 jwt 比较火
崔哥
2023/04/16
3.2K0
laravel定时任务配置
定时任务写在app/Console/Kernel.php文件中的schedule方法中即可,你可以设置定时执行闭包,或者定时执行一个命令。
ianzhi
2019/07/31
1.2K0
[译]Laravel 5.0 之事件调度程序 (定时任务)
本文译自 Matt Stauffer 的系列文章. ---- 关于 Laravel 5.0 的事件调度程序(可以理解为定时任务),Eric Barnes 有一篇很长的文章。我这篇文章则会尽量简短: Laravel 5.0 新增了一个框架内置的 cron 风格的令人难以置信的调度程序(与 Indatus 的 Dispatcher 类似)。只要在服务器上设置一个每分钟调用 artisan schedule:run 的 cron job, 一切就准备就绪了。 */1 * * * * php /path/to/a
小李刀刀
2018/03/02
1K0
laravel 定时任务通过队列发送邮件[通俗易懂]
关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看。
全栈程序员站长
2022/07/12
1.3K0
基于 Redis 实现分布式锁及对应的 PHP 实现源码
不同于 Java、Golang 这些语言,PHP 本身并不支持并发编程,因为对于 PHP 的主战场 Web 应用而言,每次用户请求都是通过独立的 PHP-FPM 进程处理的,PHP 为了保持语言的简单性,并不支持在这个进程内开启多进程/线程,也就不存在什么基于锁的并发安全问题。
学院君
2021/01/08
1.4K0
3分钟短文|Laravel命令行调用控制器方法,你会几个?
有时候为了不重写代码,避免冗余无用重复的代码在程序内到处都是。我们总是想方设法 把写过的逻辑拿过来使用。
程序员小助手
2020/08/26
1.8K0
推荐阅读
相关推荐
在 Golang 中进行「任务调度」,像用 Laravel 一样丝滑
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验