博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel任务调度
阅读量:3987 次
发布时间:2019-05-24

本文共 1518 字,大约阅读时间需要 5 分钟。

laravel任务调度

替代linux的cron来管理定时任务。

一、app/Console/Kernel.php

command('Read3SuccessStat')->everyMinute()->runInBackground()->withoutOverlapping(); /** * 任务只运行在一台服务器上 * 避免任务重复(默认24小时) * -- 每五分钟 */ $schedule->command('Read3DepartRank')->everyFiveMinutes()->runInBackground()->withoutOverlapping(); /** * 任务只运行在一台服务器上 * 避免任务重复(默认24小时) * -- 每五分钟 */ $schedule->command('Read3ActivityBookOver')->everyFiveMinutes()->runInBackground()->withoutOverlapping(); }}

二、app/Console/Commands/Read3SuccessStat.php

_readRepository = $readRepository; } /** * Execute the console command. * * @return mixed */ public function handle() {
$this->_readRepository->read3SuccessStat(); }}

三、app/RepositoryInterface/Read3RepositoryInterface.php

五、测试

CMD

d:cd D:\dev\php\magook\trunk\server\dbserverWorkSpace\opDbserverphp artisan schedule:run

默认laravel会将输出重定向到 NUL,也就是看不到,当然可以设置到其他地方。

六,线上Linux

设置Crontab,是系统每分钟调一次这个命令

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

注意的点:

1、laravel任务调度的原理是,每分钟检查一次所有的任务是否达到执行时间,如果达到了就放入执行队列执行,而且,实际上是顺序执行的,并不是并行的,这点和Linux自带的cron不同,显然这样是有问题的,我们需要的是并行的,因为如果上一个任务执行时间比较长,那么后面的任务就不是按时执行了,因此Laravel提供了任务以后台进程的方式来执行的设置,这样每个任务都同时独立运行,因此我们要加上runInBackground()方法 。当然,在本地windows调试的话可以不用加了。

2、定时任务最大的弊端是间隔时间的设置,因为不好精确知道脚本的执行时间,设置短了,可能同一个任务不止一个进程在跑,这样会导致数据混乱,时间设置太长了,又没有充分利用系统资源,于是Laravel提供了一个加锁的机制,确保同一个任务不会被多个进程执行,因此我们要加上withoutOverlapping()方法。

转载地址:http://ggxui.baihongyu.com/

你可能感兴趣的文章
两个队列实现一个栈
查看>>
用两个栈实现一个带getMin()方法的新型栈
查看>>
头条搜索部门后台开发实习生面经
查看>>
java 线程池
查看>>
设计模式之单例模式
查看>>
自己写的String类能够被加载吗?
查看>>
java让主线程等待所有子线程执行完应该怎么做
查看>>
如此调用
查看>>
计算机的发展史
查看>>
二叉树两个节点最近公共祖先的解法
查看>>
三个线程轮流打印0到10
查看>>
RocketMQ 编译 不再支持源选项6
查看>>
Cpu、核、Java Runtime.getRuntime().availableProcessors()
查看>>
阶乘的对某个质因子P的分解
查看>>
字符串匹配问题,返回第一个匹配的下标 ,运用了KMP算法
查看>>
逆序单链表 时间复杂度O(n)
查看>>
创建二叉树、递归/非递归 先序/中序/后序遍历二叉树算法
查看>>
未排序数组中累加为给定值的最长子数组问题。
查看>>
软件工程
查看>>
归并排序
查看>>