Laravel框架实现定时发布任务的方法
作者:skyisbluening 发布时间:2023-11-22 23:54:57
本文实例讲述了Laravel框架实现定时发布任务的方法。分享给大家供大家参考,具体如下:
背景:需要每隔一小时新建一个任务
http://laravelacademy.org/post/8484.html
Laravel官方自带这个功能,需要利用到Linux系统的cronTab功能。
1、利用Linux的cronTab功能
(1)进入Linux服务器环境,命令行输入
crontab -e
这样就直接进入了服务器下的/var/spool/cron/root文件。如果/var/spool/cron/下还没有root文件,输入上面那个命令就会自动新建root文件了。
(2)先进入文件编辑模式,在root文件中输入
* * * * * /usr/local/php/bin/php /opt/xxx/xxx/artisan schedule:run 1>> /dev/null 2>&1
前面第一个目录是php在服务器上的位置,如果不清楚,可以命令行输入which php
自行查看然后修改。
第二个目录是你的laravel项目的存放位置,就是artisan文件所在的根目录
2、然后在laravel项目目录下新建任务,命令行输入
php artisan make:command SendTask
然后发现在app/Console/Commands路径下多了一个SendTask.php的文件
自定义这个文件的$signature(等会儿要跟app/Console/Kernel.php文件中的command里面的名称对应,比如我写的是task:send)
、$description(对这个任务的描述)
、handle()
方法中是这个定时任务的主要逻辑代码。
3、然后修改app/Console/Kernel.php文件
在$commands里要增加刚刚的任务的存放路径;要同时执行多个任务时,将要同时执行的任务的class加入到$commands
protected $commands = [
\App\Console\Commands\SendTasks::class,
\App\Console\Commands\SendTaskEveryDay::class,
\App\Console\Commands\SendTaskEveryWeek::class,
schedule里面是定时执行的核心代码:可以自己直接在里面写要执行的任务的内容,也可以调用新建的command里的任务执行内容。后面就是说明执行任务的频次。
protected function schedule(Schedule $schedule)
{
// $schedule->call(function () {
// Task::create(['title' => '发送定时任务']);
// })->everyMinute();
//调用artisan
// $schedule->command('tasks:send')->hourly();
$schedule->command('tasks:send')->cron('0 */2 * * *');
$schedule->command('tasks:everyday')->dailyAt('09:00');
其实到这里已经是可以执行发布定时任务的期待了,但是我希望可以传参到这个定时任务里面去,因为每次的任务内容不一样,需要达到可以自定义的效果。在这里纠结了很久,还尝试了修改handle()
方法,修改成为handle($data)
,然后在要发布定时任务的时候调用这个handle()
方法,然后将参数通过$data
传过来,但是发现一旦handle()
里面带参数之后定时任务就不能执行了,具体原因不知道,但是这个思路明显就是错了。
最后走了很多弯路,想到一个办法,不能从外部传参进去,就在方法里面把参数查出来。我想要的效果就是:新建一个任务,然后这个新建的任务需要每隔1小时自动新建一次。
想到的解决办法就是在handle()
方法里面用sql语句或者查询构造器先把新建的那个定时任务查出来,然后将这个任务再新增一次。暂时能想到的就是这个办法,起码可以达到我想要的效果了。
$cron=Task::where('type', 'xxx')
->first();
$cronTab=$cron->jsonSerialize();
$task= Task::create($cronTab);
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
来源:https://blog.csdn.net/weixin_38682852/article/details/80383986


猜你喜欢
- 这是个“懒人”用的办法,你没有时间更新主页,却又不能让三个月前的更新还标着"new",那么用这个js可以帮你的大忙!这个
- 1.前言JavaWeb Struts2的 * 我们都能很熟悉,在请求交给Action处理之前,先在 * 中处理,处理完之后再交给Action
- 基本概述我们知道MySQL有2种方式指定复制同步的方式,分别为:基于binlog文件名及位点的指定方式 - 匿名事
- 如何判断一个对象是可迭代对象? 方法是通过collections模块的Iterable类型判断:>>> from coll
- asp之家注:对于ACCESS数据库中的NULL,经常我们直接判断该字段是否为空用的是:name="",但是这个还不够,
- 首先我们看公式:这个是要拟合的函数然后我们求出它的损失函数, 注意:这里的n和m均为数据集的长度,写的时候忘了注意,前面的theta0-th
- 一 CGI.pm中的方法(routines)调用1. CGI.pm实现了两种使用方法,分别是面向对象的方式和传统的perlmodule方法的
- 富文本-图片上传html:<div class="layui-form-item layui-form-text"
- 用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供
- requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。作用:模拟浏览器发请求。提示:老版使用
- #coding: utf-8 import Image,ImageDraw,ImageFont,os,string,random,Image
- 1. 事务介绍MVCC之前,先介绍下事务:事务是为了保证数据库中数据的完整性和一致性。事务的4个基本要素:原子性(Atomicity):要么
- 什么是PromisePromise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,
- 本篇教程展示如何安装Pymongo库,编辑器使用的当然是pycharm。准备我们这里直接使用pycharm来安装Pymongo库,和pych
- 有个简单的查看方法,打开记事本,如要查看“Chr("119") w”,可以按下Alt+119 (先按住Alt不放,然后输
- 一、读写excel数据利用pandas可以很方便的读写excel数据1.1 读:data_in = pd.read_excel('M
- 我们用pycharm写CSS的时候,是不是苦于没有提示,那么pycharm中如何显示CSS提示呢?下面小编给大家分享一下。首先点击左上角的f
- <script language="javascript"><!-- var&n
- 今天讲下软件开发中最常见的历史数据迁移方式。在讲迁移之前,先简单介绍下几个基本概念。1、什么是历史数据迁移?简单直白地说:就是将一些创建时间
- 简单概述js变量可以划分为两种不同的数据类型:基本类型:undefined、null、Boolean、Number、String、Symbo