2015-12-27 8 views
6

SytuacjaJak mogę dowiedzieć się więcej o tym, dlaczego moja kolejka Laravel w kolejce nie powiodła się?

Używam laravel kolejek do przetwarzania dużej liczby plików multimedialnych, oczekuje się, że osoba fizyczna praca wziąć minut (lets just say nawet godzinę).

Używam Inspektora do uruchamiania mojej kolejki i uruchamiam 20 procesów jednocześnie. Mój plik nadzorca config wygląda następująco:

[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 

w moim duplitron-worker.log zauważyłem Failed: Illuminate\Queue\[email protected] występuje sporadycznie i chciałbym, aby lepiej zrozumieć, co dokładnie się niepowodzeniem. Nic nie pojawia się w moim pliku laravel.log (w którym zwykle pojawiałyby się wyjątki).

Pytanie

Czy jest to wygodny sposób dla mnie, aby dowiedzieć się więcej o tym, co jest przyczyną moja praca na niepowodzenie?

+1

Dodaj 'loglevel' pod' [supervisord] 'w supervisord.conf. Możesz zacząć od 'debugowania' (sprawdź więcej tutaj: http://supervisord.org/logging.html). Zwykle powód, dla którego się nie powiedzie, ponieważ kod, który uruchamiasz, nie kończy się poprawnym "stanem wyjścia". Możesz go również zobaczyć tutaj: http://stackoverflow.com/questions/28937722/supervisord-exit-status-1-not-expected-running-php-script Ostatnia rzecz, możesz potrzebować dodać 'stderr_logfile' w swoich konfiguracjach . – Axalix

Odpowiedz

14

Oto, co zawsze robię, ale najpierw - upewnij się, że masz tabelę nieudanych prac! Jest dobrze udokumentowane, szukać go :)

  1. Uruchom komendę php artisan queue:failed notować wszelkie nieudane prace, i wybrać jedną jesteś po. Zapisz identyfikator.

  2. Następnie upewnij się, aby zatrzymać swoją kolejkę z supervisorctl stop all duplitron-worker:

  3. Wreszcie, upewnij się, ustawiając swoją .env dla APP_DEBUG = true.

  4. Następnie uruchom php artisan queue:retry {step_job_1_id}

  5. Teraz ręcznie uruchomić php artisan queue:listen --timeout=XXX

Jeśli błąd jest strukturalne (a większość z nich), należy uzyskać niepowodzenie ze stosu debugowania w pliku dziennika.

Powodzenia debugowania :-)

+0

To jest idealne - dzięki! Teraz po prostu muszę dowiedzieć się, dlaczego działa, gdy próbuję go ponownie (również ... nieudane zadania powoli są poprawnie przetwarzane, mimo że mam ustawione na 1 ustawienie, które mnie myli, ale to jest osobne pytanie!) – slifty

+0

Sądzę, że jedno pytanie uzupełniające/jeśli masz sugestie, które możesz dodać do swojej odpowiedzi - czy są sposoby, jakbym mógł uzyskać stos błędów w pliku dziennika, gdy jest uruchomiony zbiorczo. Podejrzewam, że część problemu może dotyczyć ograniczonych zasobów lub limitów czasu, które nie występują, gdy działa tylko jeden wątek. – slifty

+2

Cóż, jak powiedziałeś - jeśli działa dobrze solo, nie jest związane z pismem. Zawęziliście to, to dobra wiadomość. Najlepiej byłoby wtedy sprawdzić logi systemowe i php. Coś tam musi być! To najprawdopodobniej czas oczekiwania lub niedobór pamięci :) –