Ich habe php artisan queue:listen
ausgeführt und nach etwa 27 Minuten hört es auf, weitere Jobs zu verarbeiten. In meinem Fehlerprotokoll sehe ich den Fehler:
Ist das ein Fehler? Ich denke nicht, dass der Zuhörer eine Auszeit haben soll!
Ein zweiter Durchlauf des Zuhörers endete nach 3 Stunden. Ich benutze Laravel 4 auf nginx mit php-fgm.
Unabhängig davon, wie lange Sie es eingestellt haben, wird der Speicher oder die Zeitüberschreitung nicht mehr ausreichen. Sie können den Supervisor verwenden, um ihn am Laufen zu halten. Es ist wirklich einfach zu bedienen.
Erste Installation :
%Vor% oder verwenden Sie eine auf ihrer Site aufgelistete Methode wie easy_install http://supervisord.org/installing.html
Fügen Sie nun eine Konfigurationsdatei für den Supervisor hinzu. Öffnen Sie /etc/supervisor/conf.d/queue.conf
(oder wie immer Sie die Datei benennen möchten, aber fügen Sie sie in /etc/supervisor/conf.d/
ein) und fügen Sie Folgendes hinzu:
Erklärung der oben genannten: program:_____
ist, wie wir nennen, was ausgeführt wird. Wir werden später darauf verweisen. command
ist der Befehl, den Sie ausführen möchten. directory
ist der Ort, an dem es ausgeführt werden soll. In meinem Fall bin ich in einem Projekt namens "Laravel". stdout_logfile
ist die Datei, in die das von dem Befehl empfangene stdout umgeleitet werden soll. redirect_stderr
wird auf "true" gesetzt, um alle Fehler an das gleiche Protokoll zu übergeben, das in stdout_logfile
angegeben wurde. Sie können diese auch so einstellen, dass sie in ihre eigene Protokolldatei wechseln.
Supervisor-Controller öffnen :
%Vor% Lesen Sie den Inhalt des Verzeichnisses /etc/supervisor/conf.d/
: (noch in supervisorctrl)
Fügen Sie das Warteschlangenprogramm dem Supervisor hinzu :
%Vor%Das ist es. Jetzt sollte es laufen. Wenn Sie Fehler haben, schauen Sie in Ihre Protokolldatei, um zu sehen, was falsch ist.
Sobald Sie Ihren Server neu gestartet haben, müssen Sie den Supervisor erneut mit sudo service supervisor start
starten.
Laracasts deckt Supervisor wirklich gut ab. Wenn Sie Laracasts nicht abonniert haben, empfehle ich es sehr.
Auch der Prozess, in dem der Handwerker sich bewegt, ist nicht in Ordnung. es ist der Prozesswrapper. Symfony \ Component \ Process \ Process Class wird verwendet, um den beliebigen Prozess auszuführen (in meinem Fall Knp \ Bundle \ SnappyBundle \ Snappy \ LoggableGenerator das Paket, das PDFs mit wkhtmltoPDF druckt, stellt fest, dass wkhtmltoPDF abgelaufen ist, nur weil ich ein PDF mit rende 11000 Seiten, es braucht nur mehr Zeit)
Es hat nichts mit max_execution_time = XXX von php.ini zu tun (da es eine Ausnahme ist, die von der Symfony Process-Instanz mit einer verwirrenden Nachricht ausgelöst wird)
Sie müssen es schaffen, die Objektbeziehungen zu durchlaufen, um
aufzurufen %Vor%Dies löst das Problem. In meinem Fall:
%Vor%Ich glaube nicht, dass der Zuhörer ein Zeitlimit hat, ich denke, dass der Prozess, den er versucht, zu laufen, ein Zeitlimit ist. Diese Ausnahme kommt von Symfony \ Component \ Process . Leider ist der Prozesscode für mich heute etwas übertrieben.
Haben Sie erwogen, supervisord zu verwenden, um sicherzustellen, dass Ihr Prozess weiterläuft? Wenn supervisord installiert wird, falls Ihr Prozess aus irgendeinem Grund abstürzt, wird dieser Daemon die Sicherung erneut starten. Die Firma, für die ich arbeite, verwendet sie in Verbindung mit der Warteschlange: höre jetzt eine Weile zu.
Tags und Links php laravel-4 laravel symfony-components