有没有办法为AWS Batch作业(或队列)设置最长运行时间?这是大多数批处理管理器中的标准设置,可以避免因任何原因挂起作业时浪费资源。
答案 0 :(得分:3)
AFAIK没有这方面的功能。但是,forum中提出了一个类似问题的解决方法。
一个想法是将Batch作为一个Activity来自Step Functions,pingback 回到那份工作的时间表(例如每分钟)。如果它停止 然后您可以将该情况检测为超时 活动并采取相应行动(终止工作等)。不理想 解决方案(特别是如果作业继续作为“僵尸”反击), 但这是一个开始。你也可能需要在一个存储活动令牌 数据库将它们跟踪到批处理作业ID。
或者,您将该设置拆分为2个步骤,并安排批处理 来自第一个状态的Lambda的作业,然后将批处理作业ID传递给 第二步然后轮询批次(从另一个Lambda)为它 具有重试和间隔秒的状态(例如每分钟一次或甚至一次 使用指数退避),并根据您的计算得出MaxAttempts 超时。这样,您就不需要任何外部状态存储 机制,长轮询或甚至从工作中“退回”(可以 一个僵尸),但缺点是更多的步骤。
答案 1 :(得分:2)
自2018年4月起,AWS Batch现在支持在提交作业时或在作业定义中设置Job 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的入口点以安排执行时间限制。