我应该删除 Cloud 运行 中的 Laravel 调度吗?

Should I remove Laravel scheduling in Cloud Run?

我正在将我的 Laravel 8 应用程序迁移到云端 运行。但是我的调度程序有问题。我的 Laravel 应用使用 Laravel Scheduling 所以我有 5 个任务 :

   protected function schedule(Schedule $schedule) {
        $schedule->command(Commands\CmdOne::class)->monthlyOn(1, '02:10');
        $schedule->command(Commands\CmdTwo::class)->dailyAt('04:00');
        $schedule->command(Commands\CmdThree::class)->dailyAt('04:00');
        $schedule->command(Commands\CmdFour::class)->dailyAt('05:00');
        $schedule->command('activations:clean')->daily();
    }

但我认为将 cron 放在容器内是有风险的,因为 Cloud 运行 可以 运行 我的应用程序的多个容器实例,我担心 运行 任务会多次因为我的任务会向我的客户发送电子邮件,我只想 运行 他们一次。

例如:如果 Cloud 运行 在 05:00Am 创建我的容器的 5 个实例,那么命令 $schedule->command(Commands\CmdFour::class)->dailyAt('05:00'); 将执行 5 次,我不希望这样。

所以我看到 Google Cloud Scheduler,我可以向 运行 我的任务公开 Web 服务。但我不知道这是不是好方法?还是有另一种方式来执行我的任务?我不知道删除 Laravel Scheduler 是否是正确的方法。

因此,如果我现在使用 Cloud Scheduler,我必须在 Cloud Scheduler 中创建 5 个 cron。我认为一个应用程序没问题,但如果我有 10 个应用程序(具有相同的代码库但不同的云 运行 服务),将很难管理所有这些 crons,因为每个应用程序我将获得 5 个 crons。所以在这种情况下是 50 个 crons。

你有更好的方法来管理这个吗?

如果您有正确的缓存设置(由所有服务器共享),那么您可以使用 onOneServer() 方法。

https://laravel.com/docs/9.x/scheduling#running-tasks-on-one-server