部署Laravel“ schedule:run”与“ queue:work”

pab*_*rsk 1 continuous-deployment laravel

当我们有一个工作实例时,我们可以运行以下命令:

php artisan queue:work --queue=default --daemon --tries=5
Run Code Online (Sandbox Code Playgroud)

里斯?然后,如果我们已经运行了先前的命令,是否有必要将其添加schedule:run到cron作业中?

php artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

这两个命令都是必需的吗?还是一个?

Sal*_*301 6

这两个命令完全不同,并且执行两项完全不同的操作。
artisan queue:work 为您的异步作业和事件侦听器启动队列工作器,以便在分派时在后台运行。 在指定的时间
artisan schedule:run 执行Console\Kernel schedule功能中定义的命令(这就是CRON的意思)

例子

1- queue:work

给定这样的工作类别

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class LogStuff implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        info('stuff');
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的路线可以分派工作
routes/web.php

use App\Jobs\LogStuff;

Route::get('/', function () {
    dispatch(new LogStuff());
    return view('welcome');
});
Run Code Online (Sandbox Code Playgroud)

QUEUE_CONNECTION.env这样的

QUEUE_CONNECTION=redis
Run Code Online (Sandbox Code Playgroud)

在运行php artisan queue:work命令之前,不会记录任何内容

队列中的工作人员

由于两次未运行队列工作程序的调度都会将作业添加到队列中(例如,在redis中)

2-计划的命令

鉴于所述的在计划的命令App\Console\Kernel 是这样

use App\Jobs\LogStuff;

Route::get('/', function () {
    dispatch(new LogStuff());
    return view('welcome');
});
Run Code Online (Sandbox Code Playgroud)

在执行php artisan schedule:run之前,什么都不会输出到控制台

1分钟后 预定任务已运行

我希望这足够清楚