我已经建立了一个具有最低配置、mysql 数据库、数据库队列等的基本 laravel 项目。
我用这个内容创建了一个 Job 类
<?php
namespace App\Jobs;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class TestJob implements ShouldQueue
{
public $timeout = 10;
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
\Log::info("Job started");
sleep(12);
\Log::info("Job ended");
}
public function failed(Exception $exception){
\Log::info("Job failed");
}
}
我只是为了简单起见,从路由中触发事件。
Route::get('/', function () {
dispatch(new \App\Jobs\TestJob());
return view('welcome');
});
我有 php artisan queue:work 在终端中运行,当我在浏览器中访问基本 url 路由时,作业排队。
我将此作为 queue:work 命令的输出。
ajeesh@mymachine:/var/www/html/queue$ php artisan queue:work
[2017-10-05 10:28:43] Processing: App\Jobs\TestJob
Killed
当我检查日志文件时,
ajeesh@mymachine:/var/www/html/queue/storage/logs$ tail laravel.log
[2017-10-05 10:28:43] local.INFO: Job started
它只有这个内容。
因为它在 10 秒后超时 \Log::info("Jobended"); 永远不会被执行,看起来不错。
但是,我想知道为什么失败的事件没有被调用。
我已确保满足超时要求
ajeesh@mymachine:/var/www/html/queue$ php -v
PHP 7.1.10-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Sep 29 2017 17:04:25) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.10-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
ajeesh@mymachine:/var/www/html/queue$ php -m | grep pcntl
pcntl
谁能帮助理解我在这方面做错了什么?