我如何才能更多地了解 Laravel 排队作业失败的原因?
How can I learn more about why my Laravel Queued Job failed?
情况
我正在使用 Laravel 队列来处理大量媒体文件,单个作业预计需要几分钟(假设最多一个小时)。
我正在使用 Supervisor 运行 我的队列,并且我一次 运行ning 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 文件中没有任何内容(这是通常会出现异常的地方)。
问题
是否有方便的方法让我了解更多有关导致我的工作失败的原因?
在较新的 Laravel 版本中,failed_jobs
table 中有一个 exception
列,其中包含您需要的所有信息。感谢 cdarken 和 Toskan 指出这一点!
==== 下面是旧方法
这是我一直做的,但首先 - 确保你有一个失败的工作 table!有据可查,查一查:)
运行 php artisan queue:failed
命令列出所有失败的作业,然后选择您想要的作业。记下ID。
然后,确保使用 supervisorctl stop all duplitron-worker:
停止队列
最后,确保 APP_DEBUG
的 .env 设置 = true。
然后运行php artisan queue:retry {step_job_1_id}
现在手动运行php artisan queue:listen --timeout=XXX
如果错误是结构性的(大部分都是),您应该在日志文件中找到带有调试堆栈的故障。
祝调试顺利:-)
正如@cdarken 所指出的,异常可以在您的数据库table failed_jobs
列名exception
中找到。谢谢@cdarken 我希望他的回答是一个答案而不是评论。
为我工作,
在 vendor/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php
只需删除 "use Illuminate\Queue\SerializesModels;" 第 6 行
&修改第11行为"use Queueable;"
- 运行这些命令在db
中创建一个tablefailed_jobs
php artisan queue:failed-table
php artisan migrate
运行 队列工作人员 php artisan queue:work --tries=2
检查数据库中的异常原因 table failed_jobs
您刚刚创建的。
情况
我正在使用 Laravel 队列来处理大量媒体文件,单个作业预计需要几分钟(假设最多一个小时)。
我正在使用 Supervisor 运行 我的队列,并且我一次 运行ning 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 文件中没有任何内容(这是通常会出现异常的地方)。
问题
是否有方便的方法让我了解更多有关导致我的工作失败的原因?
在较新的 Laravel 版本中,failed_jobs
table 中有一个 exception
列,其中包含您需要的所有信息。感谢 cdarken 和 Toskan 指出这一点!
==== 下面是旧方法
这是我一直做的,但首先 - 确保你有一个失败的工作 table!有据可查,查一查:)
运行
php artisan queue:failed
命令列出所有失败的作业,然后选择您想要的作业。记下ID。然后,确保使用
supervisorctl stop all duplitron-worker:
停止队列
最后,确保
APP_DEBUG
的 .env 设置 = true。然后运行
php artisan queue:retry {step_job_1_id}
现在手动运行
php artisan queue:listen --timeout=XXX
如果错误是结构性的(大部分都是),您应该在日志文件中找到带有调试堆栈的故障。
祝调试顺利:-)
正如@cdarken 所指出的,异常可以在您的数据库table failed_jobs
列名exception
中找到。谢谢@cdarken 我希望他的回答是一个答案而不是评论。
为我工作, 在 vendor/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php 只需删除 "use Illuminate\Queue\SerializesModels;" 第 6 行 &修改第11行为"use Queueable;"
- 运行这些命令在db 中创建一个table
failed_jobs
php artisan queue:failed-table
php artisan migrate
运行 队列工作人员
php artisan queue:work --tries=2
检查数据库中的异常原因 table
failed_jobs
您刚刚创建的。