2015-12-27 12 views
6

La situazioneCome posso saperne di più sul motivo per cui il mio Job in coda di Laravel è fallito?

sto usando laravel code di elaborare grandi quantità di file multimediali, un singolo lavoro dovrebbe prendere minuti (lascia solo dire che fino a un'ora).

Sto utilizzando Supervisor per eseguire la mia coda e sto eseguendo 20 processi alla volta. Il mio file di configurazione supervisore si presenta così:

[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 

Nel mio duplitron-worker.log ho notato Failed: Illuminate\Queue\[email protected] si verifica di tanto in tanto e vorrei capire meglio che cosa esattamente sta fallendo. Nulla appare nel mio file laravel.log (che è dove normalmente appaiono le eccezioni).

La questione

C'è un modo pratico per me per imparare di più su ciò che sta causando il mio lavoro a fallire?

+1

Aggiungere 'loglevel' sotto' [supervisord] 'nel supervisord.conf. Puoi iniziare con 'debug' (controlla di più qui: http://supervisord.org/logging.html). Di solito il motivo per cui non funziona, perché il codice che si esegue non termina con lo "stato di uscita" corretto. Puoi anche vederlo qui: http://stackoverflow.com/questions/28937722/supervisord-exit-status-1-not-expected-running-php-script Ultima cosa, potresti aver bisogno di aggiungere 'stderr_logfile' nelle tue configurazioni . – Axalix

risposta

14

Ecco cosa faccio sempre, ma prima - assicurati di avere una tabella dei lavori falliti! E 'ben documentato, cercarlo :)

  1. Eseguire il comando php artisan queue:failed per elencare tutti i processi non riusciti, e scegliere quello che stai cercando. Scrivi l'ID in basso.

  2. Quindi, assicuratevi di fermare la coda con supervisorctl stop all duplitron-worker:

  3. Infine, assicurarsi di impostare il .env per APP_DEBUG = true.

  4. Poi gestita php artisan queue:retry {step_job_1_id}

  5. Ora eseguire manualmente php artisan queue:listen --timeout=XXX

Se l'errore è strutturale (e la maggior parte sono), si dovrebbe ottenere il fallimento con una pila di debug nel file di registro.

Buona fortuna con il debug :-)

+0

Questo è perfetto - grazie! Ora ho solo bisogno di capire il motivo per cui funziona quando lo riprovo (anche ... le attività fallite vengono lentamente rielaborate correttamente nonostante il fatto che abbia --tries impostato su 1 che mi confonde, ma questa è una domanda a parte!) – slifty

+0

Immagino una domanda successiva/se avete suggerimenti che potreste aggiungere alla vostra risposta - ci sono modi in cui posso ottenere lo stack di errore in un file di registro quando viene eseguito in blocco. Sospetto che parte del problema possa essere correlata a risorse limitate o eventualmente a timeout, che non si verificano quando è in esecuzione un solo thread. – slifty

+2

Beh, come hai detto tu - se funziona bene da solo, non è legato alla sceneggiatura. Lo hai ristretto, questa è la buona notizia La tua migliore scommessa sarebbe quella di controllare i log di sistema e di php. Qualcosa deve essere lì dentro! È molto probabile un timeout o carenza di memoria :) –

Problemi correlati