[英]Laravel 5.8 - execute background job from console command
我的项目基于 Laravel 5.8。
我有一个控制台命令可以执行一些繁重的任务(生成非常大的 PDF 文件、发送大量电子邮件等)
我尝试使用jobs将这些任务移动到后台进程。
这是我为了测试它是如何工作而做的:
php artisan make:job TestJob
作业文件:
class TestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $data;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(array $data)
{
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
sleep(5);
$date = new \DateTime();
$currentDateTime = $date->format('Ymd-His');
$logFileName = "logs/testjob-$currentDateTime.log";
$content = var_export($this->data, true);
$res = Storage::disk('local')->put($logFileName, $content);
echo "[TestJob] Print to log file: $logFileName\n";
}
}
控制台命令文件:
public function handle()
{
echo "[Console Command] Starting...\n";
$someData = [
'First name' => 'John',
'Surname' => 'Doe'
];
TestJob::dispatch($someData);
echo "[Console Command] Finished!\n";
}
执行时,这是输出:
[Console Command] Starting...
<<< delay 5 sec.
[TestJob] Print to log file: logs/testjob-20210628-114321.log
[Console Command] Finished!
问题:
作业在脚本内执行,而不是在后台执行。
我该怎么做才能让它在后台运行?
您应该将队列连接(驱动程序)从同步更改为 redis(或其他支持的队列驱动程序)。 您可以在 .env 文件中执行此操作(例如:QUEUE_CONNECTION=database)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.