gpt4 book ai didi

laravel - 部署 Laravel "schedule:run"与 "queue:work"

转载 作者:行者123 更新时间:2023-12-04 16:28:31 39 4
gpt4 key购买 nike

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

php artisan queue:work --queue=default --daemon --tries=5

对吗?那么,如果我们已经运行了前面的命令,是否需要添加 schedule:run到 cron 工作?

php artisan schedule:run >> /dev/null 2>&1

两个命令都需要?还是只有一个?

最佳答案

这两个命令完全不同,做两件完全不同的事情。artisan queue:work为您的异步作业和事件监听器启动一个队列工作器,以便在分派(dispatch)时在后台运行。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');
}
}

以及像这样分派(dispatch)工作的路线 routes/web.php
use App\Jobs\LogStuff;

Route::get('/', function () {
dispatch(new LogStuff());
return view('welcome');
});

QUEUE_CONNECTION.env像这样
QUEUE_CONNECTION=redis

Nothing is logged until the php artisan queue:work command is ran



Queue Worker in Action

作业被处理两次,因为没有运行队列 worker 的第一个分派(dispatch)只是将它添加到队列中(例如在 redis 中)

2- 预定命令

给定在 App\Console\Kernel 中定义的预定命令像这样

protected function schedule(Schedule $schedule)
{
$date = now()->format('Y-m-d');
$logfileFullpath = storage_path("logs/laravel-{$date}.log");
$schedule->command('inspire')
->everyMinute()
->sendOutputTo($logfileFullpath);
}

Nothing is outputted to the console until php artisan schedule:run is executed



1 分钟后
Scheduled task ran

我希望这足够清楚

关于laravel - 部署 Laravel "schedule:run"与 "queue:work",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761331/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com