work tutorial queues mail job failed php laravel laravel-4 symfony-components

php - tutorial - queue laravel database



Laravel 4 Queue: escuchar tiempos de espera (8)

php artisan queue:listen y después de aproximadamente 27 minutos, deja de procesar más trabajos. En mi registro de errores, veo el error:

exception ''Symfony/Component/Process/Exception/RuntimeException'' with message ''The process timed out.'' in /var/www/l4site/vendor/symfony/process/Symfony/Component/Process/Process.php:413 Stack trace: #0 /var/www/l4site/vendor/symfony/process/Symfony/Component/Process/Process.php(201): Symfony/Component/Process/Process->wait(NULL) #1 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Queue/Listener.php(63): Symfony/Component/Process/Process->run() #2 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Queue/Listener.php(50): Illuminate/Queue/Listener->runProcess(Object(Symfony/Component/Process/Process), 128) #3 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php(69): Illuminate/Queue/Listener->listen(NULL, ''default'', 0, 128, 60) #4 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Console/Command.php(108): Illuminate/Queue/Console/ListenCommand->fire() #5 /var/www/l4site/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(240): Illuminate/Console/Command->execute(Object(Symfony/Component/Console/Input/ArgvInput), Object(Symfony/Component/Console/Output/ConsoleOutput)) #6 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Console/Command.php(96): Symfony/Component/Console/Command/Command->run(Object(Symfony/Component/Console/Input/ArgvInput), Object(Symfony/Component/Console/Output/ConsoleOutput)) #7 /var/www/l4site/vendor/symfony/console/Symfony/Component/Console/Application.php(193): Illuminate/Console/Command->run(Object(Symfony/Component/Console/Input/ArgvInput), Object(Symfony/Component/Console/Output/ConsoleOutput)) #8 /var/www/l4site/vendor/symfony/console/Symfony/Component/Console/Application.php(106): Symfony/Component/Console/Application->doRun(Object(Symfony/Component/Console/Input/ArgvInput), Object(Symfony/Component/Console/Output/ConsoleOutput)) #9 /var/www/l4site/artisan(59): Symfony/Component/Console/Application->run() #10 {main}

¿Es esto un error? ¡No creo que se suponga que el oyente debe esperar!

Actualizar

Una segunda ejecución del oyente se agotó después de 3 horas. Estoy ejecutando Laravel 4 en nginx con php-fgm.


El siguiente comando funcionó como un amuleto. Ha estado funcionando toda la noche ahora (más de 12 horas).

php artisan queue:listen --timeout=0

Gracias a timgws respuesta.



No creo que el oyente esté agotando el tiempo, creo que el proceso que intenta ejecutar se está agotando. Esa excepción proviene de Symfony / Component / Process . Lamentablemente, el código de proceso en sí está un poco sobre mi cabeza por hoy.


solo ejecute COMPOSER_PROCESS_TIMEOUT = 4000 php artisan queue: listen


Ni el proceso tampoco el artesano está agotando el tiempo. es la envoltura del proceso. Symfony / Component / Process / Process Class se utiliza para ejecutar cualquier proceso (en mi caso Knp / Bundle / SnappyBundle / Snappy / LoggableGenerator el paquete que imprime archivos PDF con wkhtmltoPDF está condicionado a que wkhtmltoPDF haya agotado el tiempo de espera porque estoy procesando un PDF con 11000 páginas, solo necesita más tiempo)

No tiene nada que ver con max_execution_time = XXX de php.ini (ya que es una excepción lanzada por la instancia de Symfony Process con un mensaje confuso)

Debes lograr pasar por las relaciones de objeto para llamar

Symfony/Component/Process/Process->setTimeout(null)

Esto resuelve el problema. En mi caso:

$knp = $this->getContainer()->get(''knp_snappy.pdf''); /* @var $knp /Knp/Bundle/SnappyBundle/Snappy/LoggableGenerator */ $knp->getInternalGenerator()->setTimeout(null); $pdf = $knp->getOutputFromHtml($this->view, $printOptions);


queue:listen en Laravel 4 tiene una opción --timeout . Si desea un tiempo de espera ilimitado, debe establecer la opción --timeout en 0.

./artisan queue:listen --timeout=0


¿Ha considerado usar supervisord para asegurarse de que su proceso siga funcionando? Con supervisord instalado en caso de que su proceso fallezca por algún motivo, este daemon lo volverá a iniciar. La empresa para la que trabajo lo ha estado usando junto con la cola: escuche por un tiempo.


Independientemente de cuánto tiempo tenga configurado, eventualmente se quedará sin memoria o sin tiempo de espera. Puedes usar el supervisor para mantenerlo funcionando. Es realmente simple de usar.

Primero, instálalo :

sudo apt-get install supervisor

o use un método listado en su sitio como easy_install http://supervisord.org/installing.html

Ahora agregue un archivo de configuración para el supervisor. Abre /etc/supervisor/conf.d/queue.conf (o lo que quieras para ponerle nombre al archivo pero ponlo en /etc/supervisor/conf.d/ ) y agrega:

[program:queue] command=php artisan queue:listen directory=/var/www/laravel stdout_logfile=/var/www/laravel/app/storage/logs/supervisor_queue_listener.log redirect_stderr=true

Explicación de lo anterior: program:_____ es cómo nombramos lo que se ejecuta. Lo haremos referencia más adelante. command es el comando que desea ejecutar. directory donde se debe ejecutar. En mi caso, estoy en un proyecto llamado "laravel". stdout_logfile es el archivo donde desea redireccionar el stdout que se recibe del comando. redirect_stderr se establece en verdadero para dirigir todos los errores al mismo registro especificado en stdout_logfile . También puede configurarlos para ir a su propio archivo de registro.

Controlador de supervisor abierto :

sudo supervisorctl

Lea el contenido del directorio /etc/supervisor/conf.d/ : (mientras aún está en supervisorctrl)

reread

Agregue el programa de cola al supervisor :

add queue

Eso es. Ahora debería estar funcionando. Si tiene errores, busque en su archivo de registro para ver qué está mal.

Una vez que reinicie su servidor, tendrá que volver a iniciar el supervisor con el sudo service supervisor start .

Laracasts cubre a Supervisor realmente bien. Si no estás suscrito a Laracasts, lo recomiendo encarecidamente.