Laravel 调度程序:我应该使用作业还是命令?
Laravel Scheduler: Should I use jobs or commands?
我对是否在调度程序中安排作业或命令感到困惑。我真的找不到任何关于为什么我会选择一个而不是另一个的深入数据。通常,我已经考虑了给定的计划任务将 运行 多长时间,如果它是“长”,那么我将创建一个工作,但我最近将一些工作切换为最近的命令,因为我可以 运行他们手动。
此外,如果我在调度程序中使用命令并且我正在使用 runInBackground()
这与作业有何不同?
当你使用runInBackground
时,你只是将命令发送到shell后台,就像在shell中调用一个命令,在命令后面加上&
.
作业可以在队列中执行,可以重试、缩放、使用中间件执行、批量执行并使用 Laravel Horizon 等工具进行监控。
提示:您可以通过在 routes/console.php
中注册仅调度作业的命令来将您的作业作为命令调度,例如:
Artisan::command('my-job-command', fn () => dispatch(MyJob()));
此文件中的命令由内核中的此代码自动注册:
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
我对是否在调度程序中安排作业或命令感到困惑。我真的找不到任何关于为什么我会选择一个而不是另一个的深入数据。通常,我已经考虑了给定的计划任务将 运行 多长时间,如果它是“长”,那么我将创建一个工作,但我最近将一些工作切换为最近的命令,因为我可以 运行他们手动。
此外,如果我在调度程序中使用命令并且我正在使用 runInBackground()
这与作业有何不同?
当你使用runInBackground
时,你只是将命令发送到shell后台,就像在shell中调用一个命令,在命令后面加上&
.
作业可以在队列中执行,可以重试、缩放、使用中间件执行、批量执行并使用 Laravel Horizon 等工具进行监控。
提示:您可以通过在 routes/console.php
中注册仅调度作业的命令来将您的作业作为命令调度,例如:
Artisan::command('my-job-command', fn () => dispatch(MyJob()));
此文件中的命令由内核中的此代码自动注册:
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}