Home > Back-end >  Should I remove Laravel scheduling in Cloud Run?
Should I remove Laravel scheduling in Cloud Run?

Time:03-23

I'm doing a migration of my Laravel 8 app to Cloud Run. But I have problem with my schedulers. My Laravel app using Laravel Scheduling so I got 5 tasks :

   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();
    }

But I think it's risky to place the cron inside the container because Cloud Run can run multiple container instances of my app and I fear about to run the tasks multiple times because my tasks send email to my customers and I want to run them just once.

e.g: if Cloud Run create 5 instances of my container at 05:00Am so the command $schedule->command(Commands\CmdFour::class)->dailyAt('05:00'); will be executed 5 times and I don't want this.

So I see Google Cloud Scheduler and I can expose a web service to run my tasks. But I don't know if it's the good way ? Or there is another way to execute my tasks ? I don't know if removing Laravel Scheduler is the right way.

So if I'm using Cloud Scheduler now, I have to create 5 crons in Cloud Scheduler. I think it's ok for one application but if I have 10 apps (with the same code base but different Cloud run service) it will be hard to manager all these crons because I'll get 5 crons per apps. So in this case 50 crons.

Do you have a better way to manager this ?

CodePudding user response:

If you have the right cache setup (shared by all servers) then you can use the onOneServer() method.

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

  • Related