7

我跑了php artisan queue:listen大约 27 分钟后,它停止处理更多的工作。在我的错误日志中,我看到了错误:

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}

在此处输入图像描述

这是一个错误吗?我不认为听众应该超时!


更新

侦听器的第二次运行在 3 小时后超时。我正在使用 php-fgm 在 nginx 上运行 Laravel 4。

4

8 回答 8

9

无论您将其设置多长时间,它最终都会耗尽内存或超时。您可以使用 supervisor 来保持它的运行。使用起来非常简单。

首先安装它:

sudo apt-get install supervisor

或使用他们网站上列出的方法,如 easy_installhttp://supervisord.org/installing.html

现在为主管添加一个配置文件。打开/etc/supervisor/conf.d/queue.conf(或任何您想要命名文件但将其放入的文件/etc/supervisor/conf.d/)并添加:

[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

上面的解释:program:_____是我们如何命名运行的。我们稍后会参考。command是您要运行的命令。directory是它应该运行的地方。就我而言,我在一个名为“laravel”的项目中。stdout_logfile是您要重定向从命令接收到的标准输出的文件。redirect_stderr设置为 true 以将所有错误定向到指定的同一日志,stdout_logfile您也可以将它们设置为转到它们自己的日志文件。

打开监督控制器

sudo supervisorctl

读取/etc/supervisor/conf.d/目录的内容:(仍在supervisorctrl中)

reread

将队列程序添加到 supervisor

add queue

而已。现在它应该正在运行。如果您有错误,请查看您的日志文件,看看有什么问题。

重新启动服务器后,您将不得不再次使用sudo service supervisor start.

Laracasts 很好地涵盖了主管。如果你没有订阅 Laracasts,我强烈推荐它。

于 2014-11-12T19:18:46.053 回答
7

queue:listen在 Laravel 4 中有一个--timeout选项。如果您想要无限超时,您应该将 --timeout 选项设置为 0。

./artisan queue:listen --timeout=0
于 2014-06-05T04:09:13.567 回答
3

只需运行 COMPOSER_PROCESS_TIMEOUT=4000 php artisan queue:listen

于 2013-05-22T11:35:23.883 回答
1

工匠也没有超时。它的过程包装器。Symfony\Component\Process\Process 类用于运行任何进程(在我的情况下,Knp\Bundle\SnappyBundle\Snappy\LoggableGenerator 使用 wkhtmltoPDF 打印 PDF 的包正在考虑 wkhtmltoPDF 超时只是因为我正在渲染 PDF 11000页,只是需要更多时间)

它与 php.ini 的 max_execution_time = XXX 无关(因为它是 Symfony Process 实例抛出的异常,带有令人困惑的消息)

你必须设法通过对象关系来调用

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

这解决了问题。就我而言:

    $knp = $this->getContainer()->get('knp_snappy.pdf');
    /* @var $knp \Knp\Bundle\SnappyBundle\Snappy\LoggableGenerator */
    $knp->getInternalGenerator()->setTimeout(null);
    $pdf = $knp->getOutputFromHtml($this->view, $printOptions);
于 2013-12-04T23:32:59.017 回答
0

您是否考虑过使用supervisord来确保您的进程继续运行。安装 supervisord 后,如果您的进程因任何原因死亡,该守护进程将重新启动它。我工作的公司一直在将它与 queue:listen 结合使用。

于 2014-07-23T20:37:35.263 回答
0

以下命令就像一个魅力。它现在已经通宵运行了(超过 12 小时)。

php artisan queue:listen --timeout=0

感谢 timgws 的回答。

于 2014-07-01T07:24:21.620 回答
0

我不认为侦听器正在超时,我认为它试图运行的进程正在超时。该异常来自Symfony\Component\Process。不幸的是,今天的流程代码本身有点超出我的想象。

于 2013-04-09T15:17:44.340 回答
0

问题是有时间限制。
更改时间限制并解决问题。
set_time_limit(howmanysecondsyouneed)
http://php.net/manual/en/function.set-time-limit.php

于 2013-04-09T02:59:15.710 回答