簡體   English   中英

我如何才能更多地了解為什么我的 Laravel 排隊作業失敗?

[英]How can I learn more about why my Laravel Queued Job failed?

情況

我正在使用 Laravel 隊列來處理大量媒體文件,一項單獨的工作預計需要幾分鍾(最多可以說一個小時)。

我正在使用 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 文件中沒有任何內容(這是通常會出現異常的地方)。

問題

有沒有一種方便的方法可以讓我更多地了解導致我的工作失敗的原因?

在較新的 Laravel 版本中, failed_jobs表中有一個exception列,其中包含您需要的所有信息。 感謝 cdarken 和 Toskan 指出這一點!

==== 下面是舊方法

這是我一直做的,但首先 - 確保你有一個失敗的工作表,它有很好的記錄:查一下 :)

  1. 運行php artisan queue:failed命令列出所有失敗的作業,然后選擇您想要的作業。 記下ID。

  2. 然后,確保使用supervisorctl stop all duplitron-worker:

  3. 最后,確保APP_DEBUG = true 的 your.env 設置。

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

  5. 現在手動運行php artisan queue:listen --timeout=XXX

如果錯誤是結構性的(大多數是),您應該在日志文件中看到帶有調試堆棧的失敗。

祝調試順利:-)

正如@cdarken 指出的那樣,異常可以在你的數據庫表failed_jobs column name exception中找到。 謝謝@cdarken 我希望他的回答是一個答案而不是評論。

  • 運行這些命令在數據庫中創建一個表failed_jobs
php artisan queue:failed-table
php artisan migrate
  • 運行隊列工作者php artisan queue:work --tries=2

  • 檢查您剛創建的數據庫表failed_jobs中的異常原因。

如果您使用的是數據庫而不是轉到 failed_jobs 表並在那里查找異常。

為我工作,在 vendor/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php 中只需刪除“use Illuminate\Queue\SerializesModels;” 第 6 行 & 修改第 11 行為“使用 Queueable;”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM