Laravel队列在60秒后重新启动

Laravel队列在60秒后重新启动,laravel,laravel-5,queue,Laravel,Laravel 5,Queue,我有一份这样的工作: //Run very intensive script that generates files //Notify the user that the job is done 我知道脚本运行需要4-5分钟,因为它是生成所有文件所需的时间但是,在恰好60秒后,作业被删除(即,我在我的作业数据库表中看不到它),并通知用户。然后,每隔60秒,直到脚本完成为止,系统会通知用户作业已完成。 这项工作不会失败。作业仅在前60秒出现在作业表中。文件生成脚本只运行一次 我使用主管: [p

我有一份这样的工作:

//Run very intensive script that generates files
//Notify the user that the job is done
我知道脚本运行需要4-5分钟,因为它是生成所有文件所需的时间但是,在恰好60秒后,作业被删除(即,我在我的
作业
数据库表中看不到它),并通知用户。然后,每隔60秒,直到脚本完成为止,系统会通知用户作业已完成。

这项工作不会失败。作业仅在前60秒出现在
作业
表中。文件生成脚本只运行一次

我使用主管:

[program:queue]
process_name=%(program_name)s_%(process_num)02d
command=php artisan queue:work --timeout=600 --queue=high,low
user=forge
numprocs=8
directory=/home/forge/default
stdout_logfile=/home/forge/default/storage/logs/supervisor.log
redirect_stderr=true
这是我的数据库配置:

'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'low',
            'expire' => 600,
        ],
如果我使用redis,行为是相同的

'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'low',
            'expire' => 600,
        ],

您的配置有点不正确。我不知道
expire
是从哪里来的,但我相信你的意思是
之后重试。由于您的配置未定义键后重试,Laravel将默认值设置为60秒。因此,在作业运行60秒后,您的队列正在终止作业,并将其重新排队以重试

此外,以下注释为:

--timeout
值应始终比
配置值之后的
重试\u至少短几秒钟。这将确保处理给定作业的工作人员总是在重试作业之前被杀死。如果
--timeout
选项在
配置值之后长于
重试,\u,则作业可能会被处理两次

因此,如果您的队列工作超时将为600,我建议将您的重试时间设置为至少610