Laravel Scheduler: Should I Use Jobs Or Commands?

- 1 answer

I'm torn on whether to schedule jobs or commands in the scheduler. I can't really find any in depth data on why I would choose one over the other. Typically, I've considered how long a given scheduled task will run and if it's "long" then I'll create a job, but I've recently switched a few jobs over to commands more recently because I can run them manually.

Also, if I'm using commands in the scheduler and I'm using runInBackground() how does that differ from a job?



When you use runInBackground, you're just sending the command to the shell background, like calling a command in the shell with & after the command.

Jobs can be executed in queues, which can be retried, scaled, executed with middlewares, executed in batches and monitored with tools like Laravel Horizon.

Tip: you can dispatch your jobs as commands by registering commands in routes/console.php that just dispatch the job, example:

Artisan::command('my-job-command', fn () => dispatch(MyJob()));

The commands in this file are registered automatically by this code in the Kernel:

    protected function commands()
        $this->load(__DIR__ . '/Commands');

        require base_path('routes/console.php');