【发布时间】:2019-04-12 23:44:02
【问题描述】:
当 Job 运行时,我有一个奇怪的行为: 在开发服务器(win 7 php 7.2.10)上一切正常, 在生产服务器 Linux centOS php 7.0.10 上它会抛出异常:
Illuminate\Queue\MaxAttemptsExceededException: A queued job has been attempted too many times. The job may have previously timed out.
config/queue.php
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],
这发生在作业排队之后......当它开始工作......大约 30 秒后(失败) 异常在 failed_jobs 表中
虽然它可能依赖于 php max_execution_time 指令,但是当我这样做时
php -r "echo ini_get('max_execution_time') . PHP_EOL;"
它显示为零(没有超时......这是正确的)
作业以这种方式排队:
dispatch((new Syncronize($file))->onQueue('sync'));
Sincronize 作业没有超时(有 1 次尝试),只需调用两个 artisan 命令,如果从 shell 调用,这两个命令在 prod 和 dev 服务器上都可以完美运行。
在我使用的开发服务器上启动作业
php artisan queue:work --queue=sync,newsletter,default
在产品服务器上我使用这个
知道可能是什么原因吗?
【问题讨论】:
-
你使用的是什么版本的 Laravel? Laravel 5.7 需要 php >= 7.1.3。另外,您是否在命令行中指定了
--timeout选项? -
5.4 ... no --timeout 指定默认为零(无超时)
-
作业运行多长时间?默认
--timeout设置为60 秒。另外,您的retry_after设置是什么? -
作业可以运行几分钟 .. 它同步一整套 30000 个产品 .. 没有 retry_after 设置
-
必须有一个
retry_after。检查您使用的连接下的config/queue.php。如果它比作业运行所需的时间短,则可能会重试导致失败。另外,尝试向您的工作进程添加--timeout=600或更高的数字(确保retry_after大于超时)
标签: php laravel laravel-5 queue laravel-artisan