Laravel定时任务重复发起细节

发布于 2018-03-23 00:01:26


Laravel中可用withoutOverlapping防止任务重叠执行,即上次任务运行未结束前,到新的周期时不再发起新的任务。

粘贴图片

实际使用时,输入提示显示有可选参数,打开函数定义,确实有一个表示过期时间的参数,默认是1440,单位是秒。

有过期时间,不免想到了一个问题:
如果任务已经结束,而又未到过期时间,是否发起新的任务?

测试的结果是会发起。

同时进行了另一个测试:
假如设置的过期时间比较短,而任务执行耗时比较长,超过了过期时间,这里是否发起新的任务?
结果是不发起。


综合来看,相当于设置的过期时间并不是任务首次运行可以执行的时间,也可以说是提供的过期时间参数并没有效果。
因为不论是否过期,只要调用了withoutOverlapping,任务没有结束,就不会发起新的任务。
任务结束了才会发起新任务,而不管是否过期。



测试一:
过期时间大于任务时间:
过期时间600秒,测试代码休眠65到240秒


粘贴图片


粘贴图片



结果:
任务结束后就发起了新任务,而没有等到过期后再发起。

粘贴图片

测试二:
过期时间小于任务时间
过期时间150秒,任务中休眠65到600秒

粘贴图片
粘贴图片

结果:
任务过期,但仍然等到前面的任务结束,才发起了新任务。

粘贴图片

编辑笔记



* 草稿箱未上线,请注意手动保存!!!