我已经 Build 了一个基本的laravel项目,配置最少,mysql数据库,数据库队列等 .

我用这个内容创建了一个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工匠队列:在终端中运行工作,当我在浏览器中访问基本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(“Job ended”);从来没有被执行看起来很好 .

但是,我想知道,为什么失败的事件不会被调用 .

我确保满足超时要求

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

谁能帮助理解我在这方面做错了什么?