状況
私は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ファイルには何も表示されません(例外が通常表示される場所です)。
質問
私の仕事が失敗する原因についてもっと知るための便利な方法はありますか?
新しいLaravelバージョンでは、failed_jobs
テーブルにexception
列があり、必要なすべての情報が含まれています。これを指摘してくれたcdarkenとToskanに感謝します。
====以下の古い方法
これが私がいつもしていることですが、最初に-失敗したジョブのテーブルがあることを確認してください!それは十分に文書化されています、それを調べてください:)
php artisan queue:failed
コマンドを実行して、失敗したすべてのジョブを一覧表示し、目的のジョブを選択します。 IDを書き留めます。
次に、必ずsupervisorctl stop all duplitron-worker:
でキューを停止してください
最後に、APP_DEBUG
= trueの.env設定を確認してください。
次に、php artisan queue:retry {step_job_1_id}
を実行します
手動でrunphp artisan queue:listen --timeout=XXX
エラーが構造的なものである場合(ほとんどの場合)、ログファイルのデバッグスタックでエラーが発生するはずです。
デバッグで頑張ってください:-)
@cdarkenが指摘したように、例外はデータベーステーブルにありますfailed_jobs
列名exception
。 @cdarkenに感謝します。彼の答えがコメントではなく答えになることを願っています。
ベンダー/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.phpで私のために働いた「useIlluminate\Queue\SerializesModels;」を削除するだけです。 6行目と11行目を「Queueableを使用」に変更します。