我正在尝试使用Amazon Elastic Beanstalk运行非常长的数值模拟-长达20小时。当我告诉它执行一个简短的20秒仿真时,该代码可以很好地工作。但是,当运行更长的实例时,出现错误“以下实例在允许的命令超时时间内未响应(它们最终可能仍会自行完成)”。
浏览网络后,在我看来,问题是Elastic Beanstalk最多允许工作进程运行30分钟,然后由于实例未响应(即完成模拟)而使它们超时。有人提出的解决方案是每30秒发送一次消息,以便“ ping” Elastic Beanstalk,让它知道模拟进行得很好,因此不会超时,这将使我运行一个较长的工作进程。所以我有几个问题:
添加信息谢谢您的反馈,罗希特。为了提供更多信息,我将Python与Flask一起使用。
•我的确在使用带有SQS队列的Elastic Beanstalk工作者层
•在我的代码中,我正在模拟可变长度-从短至20秒到长至20小时。 Elastic Beanstalk所做的99%的工作都在运行模拟。其他1%涉及保存结果,发送电子邮件等。
•模拟本身涉及使用生成许多随机数并处理我定义的对象。我在这里大量使用numpy。
让我知道是否能提供更多信息。我非常感谢您的帮助:)
[与一个比我更了解这方面知识的朋友交谈后,我解决了这个问题。有点粗略,但是完成了工作。供以后参考,以下是我所做的概述:
1)编写了一个主要脚本,该脚本使用了Amazon的boto库连接到我的SQS队列。编写了一个无限的while循环,每60秒轮询一次队列。当队列中有消息时,请运行模拟,然后继续执行循环
2)借用了漂亮的/etc/init.d/模板以将我的脚本作为守护程序(http://blog.scphillips.com/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/)]运行>
3)使我的主脚本和(2)中的脚本可执行
4)设置cron作业,以确保脚本在失败时可以启动。
再次,感谢罗希特(Rohit)花时间帮助我。我很高兴,即使Elastic Beanstalk并不是适合该工作的工具,我仍然可以使用Amazon
从您的问题来看,您似乎正在遇到启动超时的问题,因为在您的实例上运行的某些启动过程中的命令需要30分钟以上的时间。如here所述,您可以在Timeout
名称空间中调整aws:elasticbeanstalk:command
选项。它的值可以在1到1800之间。这意味着,如果您的命令在30分钟内完成,则不会看到此错误。该命令最终可能会按照错误消息中的说明完成,但是由于Elastic Beanstalk在指定的时间内未收到响应,因此它不知道实例的运行情况。
[遗憾的是,没有超过12小时的时间无法从SQS队列“处理消息”(请参见ChangeVisibilityTimeout的说明)。在这种情况下,这种方法不太适合您的应用程序。我遇到了同样的问题。
对于那些希望运行少于10个小时的工作的人,需要指出的是,当前的不活动超时限制为36000秒,因此恰好是10个小时而不是30分钟,就像网络上所有帖子中提到的那样(导致我认为需要上述解决方法)。