有没有办法在AWS Batch作业上设置挂机时间?

问题描述 投票:5回答:5

有没有办法为AWS Batch作业(或队列)设置最长运行时间?这是大多数批处理管理器中的标准设置,可避免因任何原因挂起作业时浪费资源。

amazon-web-services batch-processing scientific-computing aws-batch
5个回答
2
投票

自2018年4月起,AWS Batch现在支持在提交作业时或在作业定义中设置Job Timeout

https://aws.amazon.com/about-aws/whats-new/2018/04/aws-batch-adds-support-for-automatic-termination-with-job-execution-timeout/

您可以在作业定义中或提交作业时指定attemptDurationSeconds参数,该参数必须至少为60秒。在作业尝试已启动的时间戳之后经过此秒数后,AWS Batch将终止作业。在计算资源上,您的作业容器会收到SIGTERM信号,以便您的应用程序有机会正常关闭;如果容器在30秒后仍在运行,则会发送SIGKILL信号以强制关闭容器。

资料来源:https://docs.aws.amazon.com/batch/latest/userguide/job_timeouts.html

POST /v1/submitjob HTTP/1.1
Content-type: application/json

{
   ...
   "timeout": { 
      "attemptDurationSeconds": number
   }
}

3
投票

AFAIK没有这方面的功能。然而,在forum中提出了一个类似问题的解决方法。

一种想法是将批处理作为来自步骤功能的活动,从该作业的时间表(例如,每分钟)回溯。如果它停止响应,那么您可以将该情况检测为活动中的超时并相应地执行操作(终止作业等)。不是一个理想的解决方案(特别是如果工作继续作为“僵尸”回击),但它是一个开始。您还可能必须在数据库中存储活动令牌以将其跟踪到批处理作业ID。

或者,您将该设置拆分为2个步骤,并在第一个状态下从Lambda安排批处理作业,然后将批处理作业ID传递给第二个步骤,然后使用Retry和IntervalSeconds轮询Batch(来自另一个Lambda)的状态(例如每分钟一次,甚至是指数退避),并根据你的超时计算MaxAttempts。这样,您不需要任何外部状态存储机制,长轮询或甚至从作业“ping回”(它可以是一个僵尸),但缺点是更多的步骤。


1
投票

没有选项可以在批处理作业上设置timeout,但是您可以设置一个每1小时左右触发的lambda函数,并删除在说24 hours之前创建的作业。


1
投票

现在使用aws已经有一段时间了,无法找到为批处理作业设置最长运行时间的方法。但是,您可以使用一些替代方法。 AWS Forum


1
投票

遗憾的是,无法在AWS Batch上设置限制执行时间。一种解决方案可能是编辑docker的入口点以安排执行时间限制。

© www.soinside.com 2019 - 2024. All rights reserved.