Php Laravel timedout队列作业未在作业类中触发失败的方法

Php Laravel timedout队列作业未在作业类中触发失败的方法,php,laravel,laravel-5.5,laravel-queue,Php,Laravel,Laravel 5.5,Laravel Queue,我已经建立了一个基本的laravel项目,包括最小配置、mysql数据库、数据库队列等 我创建了一个包含此内容的作业类 <?php namespace App\Jobs; use Exception; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\Sho

我已经建立了一个基本的laravel项目,包括最小配置、mysql数据库、数据库队列等

我创建了一个包含此内容的作业类

<?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");
    }
}
我有一个php artisan队列:工作在终端中运行,当我在浏览器中访问基本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(“作业结束”);永远不会被处决,这看起来很好

但是,我想知道,为什么失败的事件没有被调用

我已确保满足超时的要求

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

谁能帮助我理解我在这件事上做错了什么

基本上,作业没有失败(没有发生未处理的异常或错误)。您可以使用“$this->attempts()”获取尝试次数,但我不知道您是否可以知道以前的作业是否有错误though@ka_lin你的意思是说,除非我在作业类的执行中抛出异常,否则不会调用失败的方法?您有什么建议吗:)如何针对作业的执行时间和超时值进行失败的方法调用?如果超过
$maxTries
,则应该失败,除非它是0@AlexBlex当$trys超过提供的值时,它调用failed方法,我认为$timeout的行为也一样。
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