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
猜你喜欢
- 本文以实例简单解析了php多任务程序的实现方法,具体代码如下:<?phperror_reporting(E_ALL);set_time
- 本文实例讲述了php中$_GET与$_POST过滤sql注入的方法,分享给大家供大家参考。具体分析如下:此函数只能过滤一些敏感的sql命令了
- 上一篇介绍了 HTML5 中 Canvas 的基本概念,这篇将要介绍一下 Canvas&n
- for循环只是一个多一点的代码,同时循环添加到它。而所涉及的一个循环的共同任务是: 设置一些计数器变量的初始值。 请检查条件语句是正确的。
- 随滚动条移动的DIV层js代码,无论你的滚动条到哪里这个DIV层就跟到哪里!代码中例举了五个方向的滚动div层例子:包括左上方的div,左下
- PHP sessionphp session 反序列化漏洞存在的原因:当序列化session和读取反序列化字符时采用的序列化选择器不一样时,
- 本文实例讲述了PHP基于cookie与session统计网站访问量并输出显示的方法。分享给大家供大家参考,具体如下:<?php$f_o
- Truncate是SQL中的一个删除数据表内容的语句,用法是:TRUNCATE TABLE [Table Name]。下面是对Truncat
- PDO::queryPDO::query — 执行 SQL 语句,返回PDOStatement对象,可以理解为结果集(PHP 5 >=
- 在dreamweaver4中,你可以存储你自己设定的图片,链接,flash影片,颜色表,模板等等,组成这个站点的资产,这就是Assets面板
- 下面是BeforeInitialBind事件过程:<SCRIPT language=vbscript event=
- Logminer是每个Dba都应熟悉的工具,当一天由于用户的误操作你需要做不完全的恢复时,由于你无法确定这个操作是哪个时间做的,所以这对你的
- 下载并选择MySQL的安装包由于MySQL一直在升级,所以当您阅读本文时,或许在其官方网站上已提供了新的正式版供你下载,因此,以下提供的链接
- 记住:这时候08安装的时候要自定义一个实例 比如:mysql2008(不能在使用默认实例了) sql server 2008 express
- 近日,被同事问及一个产品列表的做法怎么实现?一个产品列表,每个产品列表后面跟一个button,这些button居右对齐。其实这个效果跟新闻列
- 刚开始进入页面,当滚动向下超过原屏的时候。右侧会出现一个“返回顶部”的按钮。这个按钮会跟这网页一起向上向下,当滚动到顶部的时候。“返回顶部”
- 本文实例讲述了php将textarea数据提交到mysql出现很多空格的解决方法。分享给大家供大家参考。具体分析如下:有一些朋友可能会发现我
- SQL*DBA命令的安全性: 如果您没有SQL*PLUS应用程序,您也可以使用SQL*DBA作SQL查权限相关的命令只能分配给Oracle软
- 一、软件包a) freetds-stable.gzb) php-5.2.12.tar.gz二、安装步骤a) tar zxvf freetds
- 数据库设计(Database Design)的概念:数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之