La situation

J'utilise Laravel Queues pour traiter un grand nombre de fichiers multimédias, un travail individuel devrait prendre quelques minutes (disons jusqu'à une heure).

J'utilise Supervisor pour exécuter ma file d'attente et j'exécute 20 processus à la fois. Mon fichier de configuration de superviseur ressemble à ceci:

[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

Dans mon duplitron-worker.log, j'ai remarqué que Failed: Illuminate\Queue\CallQueuedHandler@call se produit occasionnellement et j'aimerais mieux comprendre ce qui échoue exactement. Rien n'apparaît dans mon fichier laravel.log (où les exceptions apparaissent normalement).

La question

Existe-t-il un moyen pratique pour moi d'en savoir plus sur les causes de l'échec de mon travail?

9
slifty 28 déc. 2015 à 00:59

4 réponses

Meilleure réponse

Dans les nouvelles versions de Laravel, il y a une colonne exception dans le tableau failed_jobs qui contient toutes les informations dont vous avez besoin. Merci cdarken et Toskan pour l'avoir signalé!

==== ANCIENNE MÉTHODE CI-DESSOUS

Voici ce que je fais toujours, mais d'abord - assurez-vous d'avoir un tableau des échecs! C'est bien documenté, cherchez-le :)

  1. Exécutez la commande php artisan queue:failed pour répertorier toutes les tâches ayant échoué et choisissez celle que vous recherchez. Notez l'ID.

  2. Assurez-vous ensuite d'arrêter votre file d'attente avec supervisorctl stop all duplitron-worker:

  3. Enfin, assurez-vous que votre paramètre .env pour APP_DEBUG = true.

  4. Puis exécutez php artisan queue:retry {step_job_1_id}

  5. Maintenant, exécutez manuellement php artisan queue:listen --timeout=XXX

Si l'erreur est structurelle (et la plupart le sont), vous devriez obtenir l'échec avec la pile de débogage dans votre fichier journal.

Bonne chance pour le débogage :-)

22
Stan Smulders 23 nov. 2018 à 11:31

Comme @cdarken l'a souligné, l'exception peut être trouvée dans votre table de base de données failed_jobs nom de colonne exception. Merci @cdarken Je souhaite que sa réponse soit une réponse et non un commentaire.

1
Toskan 9 oct. 2018 à 23:20

A travaillé pour moi, dans vendor / laravel / framework / src / Illuminate / Notifications / SendQueuedNotifications.php Il suffit de supprimer "use Illuminate \ Queue \ SerializesModels;" Ligne 6 & modifier la ligne 11 pour "utiliser la file d'attente;"

-1
ibrahim.suez 14 juin 2019 à 16:14
  • Exécutez ces commandes pour créer une table failed_jobs dans db
php artisan queue:failed-table
php artisan migrate
  • Exécutez le processeur de file d'attente php artisan queue:work --tries=2

  • Vérifiez la raison de l'exception dans votre table de base de données failed_jobs que vous venez de créer.

0
David 5 juil. 2020 à 07:44