6

我想知道是否有人有使 Laravel 任务计划程序工作而不在多个服务器之间重叠的经验。

把它放在上下文中:我在负载均衡器后面有 3 个 API 服务器。我知道任务调度程序允许在单个服务器上使用 withoutOverlap 标志,但是我如何在所有服务器上使用相同的主体?我只希望 1 台服务器运行计划任务,而其他 2 台服务器不运行它们。

据我所知,我的选择是:

从 2 个服务器中删除 crontab。 我让我的服务器自动化,并且不想从任何服务器中删除 crontab 作业,因为这会使我的自动化构建复杂化。

编写一个使用 DB 将任务限制为仅运行的第一台服务器的包。 我可以这样做,但我想知道它是否已经完成(在谷歌上找不到任何东西)

有什么建议吗?

4

2 回答 2

5

从 Laravel 5.6+ 开始,此功能开箱即用。

根据文档,您将使用该onOneServer功能实现它,就像这样......

$schedule->command('report:generate')
            ->fridays()
            ->at('17:00')
            ->onOneServer();
于 2020-12-17T19:06:41.053 回答
4

一个人已经实现了它。查看这个作曲家包 https://packagist.org/packages/jdavidbakr/multi-server-event

于 2016-06-30T08:28:46.930 回答