如何详细了解我的 Laravel 队列作业失败的原因?

2022-08-30 22:04:58

情况

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

在我的中,我注意到偶尔会发生,我想更好地了解究竟是什么失败了。我的 laravel.log 文件中没有任何内容(这是通常出现异常的地方)。duplitron-worker.logFailed: Illuminate\Queue\CallQueuedHandler@call

问题

有没有一种方便的方法让我更多地了解导致我的工作失败的原因?


答案 1

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

==== 下面的旧方法

这是我一直做的事情,但首先 - 确保你有一个失败的作业表!它有很好的记录,:)查找它

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

  2. 然后,确保停止队列supervisorctl stop all duplitron-worker:

  3. 最后,确保 .env 的设置 = true。APP_DEBUG

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

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

如果错误是结构性的(大多数都是),则应在日志文件中使用调试堆栈获得故障。

祝你好运调试:-)


答案 2

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


推荐