web-dev-qa-db-ja.com

Laravelキューに入れられたジョブが失敗した理由について詳しく知るにはどうすればよいですか?

状況

私はLaravelキューを使用して多数のメディアファイルを処理しています。個々のジョブには数分かかると予想されます(最大1時間としましょう)。

スーパーバイザーを使用してキューを実行しており、一度に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ファイルには何も表示されません(例外が通常表示される場所です)。

質問

私の仕事が失敗する原因についてもっと知るための便利な方法はありますか?

8
slifty

新しいLaravelバージョンでは、failed_jobsテーブルにexception列があり、必要なすべての情報が含まれています。これを指摘してくれたcdarkenとToskanに感謝します。

====以下の古い方法

これが私がいつもしていることですが、最初に-失敗したジョブのテーブルがあることを確認してください!それは十分に文書化されています、それを調べてください:)

  1. php artisan queue:failedコマンドを実行して、失敗したすべてのジョブを一覧表示し、目的のジョブを選択します。 IDを書き留めます。

  2. 次に、必ずsupervisorctl stop all duplitron-worker:でキューを停止してください

  3. 最後に、APP_DEBUG = trueの.env設定を確認してください。

  4. 次に、php artisan queue:retry {step_job_1_id}を実行します

  5. 手動でrunphp artisan queue:listen --timeout=XXX

エラーが構造的なものである場合(ほとんどの場合)、ログファイルのデバッグスタックでエラーが発生するはずです。

デバッグで頑張ってください:-)

20
Stan Smulders

@cdarkenが指摘したように、例外はデータベーステーブルにありますfailed_jobs列名exception。 @cdarkenに感謝します。彼の答えがコメントではなく答えになることを願っています。

1
Toskan

ベンダー/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.phpで私のために働いた「useIlluminate\Queue\SerializesModels;」を削除するだけです。 6行目と11行目を「Queueableを使用」に変更します。

0
ibrahim.suez