[英]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.