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

时间:2017-11-20 09:12:26

标签: amazon-web-services batch-processing scientific-computing aws-batch

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

5 个答案:

答案 0 :(得分:3)

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

  

一个想法是将Batch作为一个Activity来自Step Functions,pingback   回到那份工作的时间表(例如每分钟)。如果它停止   然后您可以将该情况检测为超时   活动并采取相应行动(终止工作等)。不理想   解决方案(特别是如果作业继续作为“僵尸”反击),   但这是一个开始。你也可能需要在一个存储活动令牌   数据库将它们跟踪到批处理作业ID。

     

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

答案 1 :(得分: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/

  

您可以在作业定义中或提交作业时指定一个tryDurationSeconds参数,该参数必须至少为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
   }
}

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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