我们有一堆使用Laravel的php artisan queue:listen
监视和处理的SQS作业。
周期性地,有几分钟的闪烁和SQS超时。发生这种情况时,queue:listen
将中止,并显示如下消息:
[Symfony\Component\Process\Exception\ProcessTimedOutException]
The process "php artisan queue:work
--queue="https://sqs.us-west-2.amazonaws.com/*******/queue"
--delay=0 --memory=128 --sleep=3 --tries=0 -env=production"
exceeded the timeout of 60 seconds.
我尝试过在app/start/global.php
和app/start/artisan.php
中处理异常
App::error(function(Symfony\Component\Process\Exception\ProcessTimedOutException $exception) {
// do nothing
});
不幸的是,异常仍然会发生,我的queue:listen
仍然会死掉。
如何捕获此异常并在重试时忽略它?
发布于 2017-05-17 21:21:48
如果有帮助的话,我会使用SupervisorD来运行crons,并且让队列停止工作:每秒钟工作一次,这样我就不会有任何SQS问题了。
发布于 2014-11-10 14:36:24
您要么重新运行"php artisan queue:work...“在异常处理程序中排队作业,
或者将/vendor/symfony/process/Symfony/Component/Process/Process::setTimeout()值增加到更高的值。
或者两者都有。
发布于 2016-05-29 14:19:41
这不是一个答案,但更像是解决方法:
每当我需要确保进程运行时,即使发生错误,我也会使用npms forever。这个方便的工具会在崩溃时立即重启进程。
安装非常简单:
sudo apt-get install nodejs
sudo apt-get install npm
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo npm -g install forever
使用以下命令启动进程:forever start -c php artisan queue:listen
如果你需要停止它:forever stopall
https://stackoverflow.com/questions/23229705
复制相似问题