laravel withoutOverlapping导致执行脚本延迟或者失效问题
时间:2022-09-07 11:13
2021年7月15日11:24:00
当执行某个需要经常跑的 everyMinute的之后防止,一次脚本未执行完就又重新跑,导致出现超出预期的错误,或者数据错误,就会使用 withoutOverlapping来防止重复执行
$schedule->command(‘NoPersonPrize‘)->everyMinute()->withoutOverlapping();
但是当你有多个withoutOverlapping和多个没有使用withoutOverlapping的放在Kernel的时候,会出现一些意外,比如有些脚本没有跑,或者延迟跑,是什么原因造成的呢?
public function withoutOverlapping($expiresAt = 1440) { $this->withoutOverlapping = true; $this->expiresAt = $expiresAt; return $this->then(function () { $this->mutex->forget($this); })->skip(function () { return $this->mutex->exists($this); }); }
withoutOverlapping的底层是利用缓存指定一个互斥的锁,如果你的laravel的缓存使用redis的时候,就会使用redis作为互斥锁的缓存key,默认缓存是file
$schedule->command(‘a‘)->everyMinute()->withoutOverlapping(); $schedule->command(‘b‘)->everyMinute(); $schedule->command(‘c‘)->everyMinute(); $schedule->command(‘d‘)->everyMinute()->withoutOverlapping();
这里多数人认为a,b,c,d会在每分钟开始会同事执行,其实不是,是先执行a,|(b,c)|d,是在a执行完在执行d,(b,c)是和a基本同时执行,
问题在于在互斥锁的问题,是执行一个完成之后在执行一个,不是每个脚本独立执行的
举例:
laravel_cache:framework/schedule-0e06f675a49cb9a0010858533b27d6a525caea88
内容:b:1;
就会导致延迟执行某些脚本,甚至不执行
使用建议如下:
1,没有使用withoutOverlapping,在使用的上面,隔离开例如
$schedule->command(‘b‘)->everyMinute(); $schedule->command(‘c‘)->everyMinute(); #------------------------------------------------------------------------- $schedule->command(‘a‘)->everyMinute()->withoutOverlapping(); $schedule->command(‘d‘)->everyMinute()->withoutOverlapping();
2,如果非必要每分钟执行的脚本,不要使用everyMinute+withoutOverlapping这种组合,避免重复执行
建立通过代码逻辑规避这个问题
3,如果多个有withoutOverlapping或者没有withoutOverlapping可以通过->dailyAt(‘18:33‘);
这中类似的特殊时间避开全部整点执行问题
4,减少或者不用withoutOverlapping
相关推荐
- Android系统编程入门系列之界面Activity交互响应
- 新型横向移动工具原理分析、代码分析、优缺点以及检测方案
- uni-app滚动视图容器(scroll-view)之监听上拉事件
- uniapp h5,app两端复制文本
- Android系统编程入门系列之界面Activity响应丝滑的传统动画
- 【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
- 诺基亚短信生成!太好玩了
- iOS 跳转App Store进行评分
- 开发一个即时通讯App
- 关闭苹果IOS app自动更新
电脑软件
本类排行
- 1关闭苹果IOS app自动更新
- 2iOS 跳转App Store进行评分
- 3诺基亚短信生成!太好玩了
- 4Android系统编程入门系列之界面Activity响应丝滑的传统动画
- 5uniapp h5,app两端复制文本
- 6uni-app滚动视图容器(scroll-view)之监听上拉事件
- 7新型横向移动工具原理分析、代码分析、优缺点以及检测方案
- 8Android系统编程入门系列之界面Activity交互响应
- 9开发一个即时通讯App
- 10【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn