阅读(4695) (9)

Laravel 8 任务只运行在一台服务器上

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

注意:你的应用默认缓存驱动必须是 databasememcachedredis 才能使用这个特性。除此之外,所有服务器必须使用同一台中央缓存服务器来通信。

若你的应用在多台服务器中运行,你可能需要限制某个计划任务仅在单台服务器上运行。假如你有一个计划任务:在每周五晚生成一份新报告。若此任务调度器在三台服务器上运行,那么该任务就会在三台服务器上运行并生成三份报告。这样不好。

当你定义计划任务时,可使用 onOneServer 方法表明该任务仅在单台服务器上运行。如此,第一台获取到该任务的服务器,会给它附加一个原子锁,这样便可防止其他服务器在同一时间内执行同一个任务:

$schedule->command('report:generate')
                ->fridays()
                ->at('17:00')
                ->onOneServer();