Php Laravel任务调度器跨多个服务器运行,无重叠

Php Laravel任务调度器跨多个服务器运行,无重叠,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我想知道是否有人有过使Laravel任务调度器在多个服务器之间不重叠的情况下工作的经验 把它放在上下文中:我在负载平衡器后面有3个API服务器。我知道TaskScheduler允许在单个服务器上使用withoutOverlap标志,但是如何在所有服务器上使用相同的主体?我只需要一台服务器来运行计划任务,其他两台服务器不运行它们 据我所知,我的选择是: 从两台服务器中删除crontab。我的服务器是自动的,我不想从任何服务器中删除crontab作业,因为这会使我的自动构建复杂化 编写一个包,使用D

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

把它放在上下文中:我在负载平衡器后面有3个API服务器。我知道TaskScheduler允许在单个服务器上使用withoutOverlap标志,但是如何在所有服务器上使用相同的主体?我只需要一台服务器来运行计划任务,其他两台服务器不运行它们

据我所知,我的选择是:

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

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


有什么建议吗?

已经有人实施了。查看此composer软件包

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

根据,您将使用onOneServer的
函数实现它,如下所示

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

@丹尼尔,你做了什么?我也遇到了同样的情况。@hedi我最终只是将cron作业设置为在一台服务器上运行。虽然不理想,但效果不错。我也有同样的问题,但最终还是推出了自己的解决方案——当时在网上找不到任何东西。使用数据库的主要问题是扩展成了一个问题——我有7台服务器执行50多个命令——最终得到了大量失败的数据库查询。错乱的处决让我走得更远了。我最终的解决方案是,每个控制台调度器执行一个闭包,该闭包依次遍历列表中的命令。虽然有点尴尬,但在不影响一致性、并行性或故障切换的情况下,一次命中数据库的命令数量却大大减少了