发布于 2018-03-23 00:01:26
Laravel中可用withoutOverlapping防止任务重叠执行,即上次任务运行未结束前,到新的周期时不再发起新的任务。
实际使用时,输入提示显示有可选参数,打开函数定义,确实有一个表示过期时间的参数,默认是1440,单位是秒。
有过期时间,不免想到了一个问题:
如果任务已经结束,而又未到过期时间,是否发起新的任务?
测试的结果是会发起。
同时进行了另一个测试:
假如设置的过期时间比较短,而任务执行耗时比较长,超过了过期时间,这里是否发起新的任务?
结果是不发起。
综合来看,相当于设置的过期时间并不是任务首次运行可以执行的时间,也可以说是提供的过期时间参数并没有效果。
因为不论是否过期,只要调用了withoutOverlapping,任务没有结束,就不会发起新的任务。
任务结束了才会发起新任务,而不管是否过期。
测试一:
过期时间大于任务时间:
过期时间600秒,测试代码休眠65到240秒
结果:
任务结束后就发起了新任务,而没有等到过期后再发起。
测试二:
过期时间小于任务时间
过期时间150秒,任务中休眠65到600秒
结果:
任务过期,但仍然等到前面的任务结束,才发起了新任务。