阅读(1643) (14)

Laravel 8 避免任务重复

2021-07-06 09:25:13 更新

默认情况下,即使之前的任务实例还在执行,调度内的任务也会执行。为避免这种情况的发生,你可以使用 withoutOverlapping 方法:

$schedule->command('emails:send')->withoutOverlapping(); 

在此例中,若 emails:send Artisan 命令 还未运行,那它将会每分钟执行一次。当你的任务执行时间非常不确定,导致你无法准确预测任务的执行时间,那 withoutOverlapping 方法会特别有用。

如有需要,你可以在「without overlapping」锁过期之前,指定它的过期时间。默认情况下,这个锁会在 24 小时后过期。

$schedule->command('emails:send')->withoutOverlapping(10);