📅  最后修改于: 2023-12-03 14:57:44.460000             🧑  作者: Mango
Laravel 是 PHP 中最流行的 MVC 框架之一,它提供了众多的功能和工具来简化 Web 应用程序的开发。其中调度工作是 Laravel 中非常强大的一个模块,可以帮助我们管理定时任务、队列任务等一系列后台任务的处理。
Laravel 提供了一个叫做 schedule
的命令来管理定时任务,我们可以使用这个命令来创建、修改和删除定时任务。你可以使用 schedule:run
命令来执行这些任务,也可以使用 schedule:list
命令来查看当前的定时任务。
php artisan schedule:run
php artisan schedule:list
我们可以使用 schedule
命令来创建定时任务,只需简单的调用 ->command()
方法并传递我们要执行的命令即可。
protected function schedule(Schedule $schedule)
{
$schedule->command('my_command')
->everyMinute();
}
上面的代码将会在每分钟运行一次 my_command
命令。
当然,我们也可以选择设置更加复杂的 CRON 表达式来控制任务的执行时间。
protected function schedule(Schedule $schedule)
{
$schedule->command('my_command')
->cron('* * * * *');
}
上面的代码将会在每分钟执行一次 my_command
命令。
如果我们没有定义 my_command
命令,Laravel 将会抛出一个异常。我们需要定义一个可以被 schedule
命令调用的命令。
php artisan make:command MyCommand
这个命令将会创建一个新的命令文件,并且包含了一些默认的代码,我们需要在这个文件中添加我们要执行的逻辑。
namespace App\Console\Commands;
use Illuminate\Console\Command;
class MyCommand extends Command
{
protected $signature = 'my_command';
protected $description = 'My Command Description.';
public function handle()
{
$this->info('Hello, World!');
}
}
上面的代码中,我们创建了一个新的命令 MyCommand
,并且在 handle
方法中添加了一个简单的 echo
语句。我们也可以在这里添加我们要执行的后台任务的代码。
默认情况下,Laravel 调度工作串行地执行所有任务。也就是说,每个任务必须等待前面的任务完成后才能被运行。如果我们需要并行执行某些任务,我们可以使用 runInBackground()
方法。
protected function schedule(Schedule $schedule)
{
$schedule->command('my_command')
->runInBackground()
->everyMinute();
}
上面的代码中,我们在 my_command
命令调用后添加了 runInBackground()
方法,这将允许我们的定时任务可以并行执行,而不必等待上一个任务完成。
我们可以将任务设置为已禁用,这样这个任务就不会被调度执行。
protected function schedule(Schedule $schedule)
{
$schedule->command('my_command')
->daily()
->when(function () {
return false;
});
}
上面的代码中,我们通过添加 when
方法并返回 false
来禁用了 my_command
命令,这样这个命令就不会被调度执行。
Laravel 的调度工作非常强大,它可以帮助我们管理定时任务、队列任务等一系列后台任务的处理。我们可以使用 schedule
命令来创建、修改和删除定时任务,并可以选择设置更加复杂的 CRON 表达式来控制任务的执行时间。只要简单的调用 ->command()
方法并传递我们要执行的命令即可。当然,我们也可以禁用一些任务或者并行执行某些任务。