如何了解Laravel排队作业失败的原因?

时间:2015-12-27 21:59:49

标签: php laravel queue

情况

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

我正在使用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

在我的duplitron-worker.log我偶然发现Failed: Illuminate\Queue\CallQueuedHandler@call,我想更好地了解究竟是什么失败了。我的laravel.log文件中没有任何内容(通常会出现例外情况)。

问题

我是否有方便的方式来了解导致我的工作失败的原因?

4 个答案:

答案 0 :(得分:18)

在较新的Laravel版本中,exception表中有一个failed_jobs列,其中包含您需要的所有信息。感谢cdarken和Toskan指出这一点!

====以下的旧方法

这是我一直以来做的事情,但首先 - 确保你有一张失败的工作表!它有详细记录,查阅:)

  1. 运行php artisan queue:failed命令列出所有失败的作业,然后选择您之后的作业。写下ID。

  2. 然后,请务必使用supervisorctl stop all duplitron-worker:

  3. 停止排队
  4. 最后,请确保APP_DEBUG的.env设置= true。

  5. 然后运行php artisan queue:retry {step_job_1_id}

  6. 现在手动运行php artisan queue:listen --timeout=XXX

  7. 如果错误是结构性的(大多数是错误的),您应该在日志文件中使用调试堆栈失败。

    祝你好运调试: - )

答案 1 :(得分:1)

@cdarken指出,可以在数据库表failed_jobs列名exception中找到异常。谢谢@cdarken,我希望他的回答是一个答案,而不是评论。

答案 2 :(得分:0)

为我工作, 在vendor / laravel / framework / src / Illuminate / Notifications / SendQueuedNotifications.php中 只需删除“使用Illuminate \ Queue \ SerializesModels”即可。 6号线 并将第11行修改为“使用可排队;”

答案 3 :(得分:0)

  • 运行这些命令以在数据库中创建表failed_jobs
php artisan queue:failed-table
php artisan migrate
  • 运行队列工作器php artisan queue:work --tries=2

  • 在刚创建的数据库表failed_jobs中检查异常原因。