Laravel任务调度器跨多个服务器,没有重叠


Laravel Task Scheduler across multiple servers without overlap

我想知道是否有人有任何经验使Laravel任务调度器在不重叠多个服务器的情况下工作。

具体来说:我在负载均衡器后面有3个API服务器。我知道任务调度程序允许在单个服务器上使用withoutOverlap标志,但我怎么能在所有服务器上使用相同的主体呢?我只想让一台服务器运行计划任务,而让其他两台服务器不运行它们。

据我所知,我的选择是:

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

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

有什么建议吗?

此功能从Laravel 5.6+起即可开箱即用。

根据文档,你可以用onOneServer函数来实现它,比如…

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

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

在.env文件(SERVER=1; SERVER=2; SERVER=3)上添加变量,然后在Kernel.php上添加条件if (env('SERVER') == 1) {}。简单但有效。