📜  调度工作 laravel - PHP (1)

📅  最后修改于: 2023-12-03 14:57:44.460000             🧑  作者: Mango

调度工作 Laravel - PHP

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() 方法并传递我们要执行的命令即可。当然,我们也可以禁用一些任务或者并行执行某些任务。