Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的Laravel队列作业在60秒后失败?_Php_Laravel_Queue - Fatal编程技术网

Php 为什么我的Laravel队列作业在60秒后失败?

Php 为什么我的Laravel队列作业在60秒后失败?,php,laravel,queue,Php,Laravel,Queue,形势 我使用Laravel队列处理大量媒体文件,单个作业预计需要几分钟(最多一个小时) 我使用Supervisor运行我的队列,一次运行20个进程。我的主管配置文件如下所示: [program:duplitron-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/duplitron/artisan queue:listen database --timeout=0 --memory=500 -

形势

我使用Laravel队列处理大量媒体文件,单个作业预计需要几分钟(最多一个小时)

我使用Supervisor运行我的队列,一次运行20个进程。我的主管配置文件如下所示:

[program:duplitron-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/duplitron/artisan queue:listen database --timeout=0 --memory=500 --tries=1
autostart=true
autorestart=true
user=duplitron
numprocs=20
redirect_stderr=true
stdout_logfile=/var/www/duplitron/storage/logs/duplitron-worker.log
有一些奇怪的事情我不知道如何解释或纠正:

  • 在运行60到65秒后,我的作业总是失败
  • 标记为失败后,即使标记为失败,作业仍将继续运行。最终他们确实成功地解决了问题
  • 当我试图找到问题的原因时,它成功了
  • 我坚信这是一个超时问题;然而,我的印象是,
    --timeout=0
    将导致无限超时

    问题


    如何防止这种临时“失败”作业状态?是否有其他我不知道的地方可能会调用队列超时?

    事实证明,除了超时之外,还有一个
    expire
    设置,定义在
    config/queue.php

        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'expire' => 60,
        ],
    
    将其更改为更高的值就成功了


    更新:此参数现在称为
    retry\u after

        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 60,
        ],
    
    重要提示:“expire”现在称为“retry\u after”(Laravel 5.4)

    这将起作用

    php artisan queue:listen --timeout=1200
    

    根据需要调整时间

    检查php.ini上的
    max\u execution\u time
    ?如果是60秒,那就是你的问题。尝试增加超时。很棒的想法@WillyPt——但是php.ini设置不会终止整个脚本吗?它继续解决。(FWIW
    max_execution\u time
    设置为30秒,我将按照这些思路进行探索和实验)。谢谢您,先生,这有助于我解决问题。但正如David的回答所指出的,“过期”现在被称为“之后重试”