如何在 AWS Batch 中取消我的作业队列中的所有 RUNNABLE(可运行)作业?

2 分钟阅读
0

我想取消或终止我的作业队列中所有处于 RUNNABLE(可运行)状态的 AWS Batch 作业。

简短描述

AWS 管理控制台一次仅允许您取消终止作业队列中的一个 AWS Batch 作业。要取消或终止队列中的多个 AWS Batch 作业,请使用 AWS 命令行界面(AWS CLI)AWS Tools for PowerShell

要取消作业队列中所有处于 RUNNABLE(可运行)状态的作业,请使用 CancelJob API 或 TerminateJob API。

解决方法

使用 CancelJob API 或 TerminateJob API 取消所有处于以下状态的作业:

  • SUBMITTED(已提交)
  • PENDING(待处理)
  • RUNNABLE(可运行)
  • STARTING(正在启动)

但是,TerminateJob 还会取消所有处于 RUNNING(正在运行)状态的作业。使用最适合您的用例的 API。有关详细信息,请参阅 TerminateJobCancelJob

在运行这些命令中的任一命令之前,请将 $myJOBQueue 环境变量设置为您任务队列的名称:

Linux

export myJOBQueue="job-queue-name"

PowerShell

$myJOBQueue="job-queue-name"

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI,或者使用 AWS Tools for PowerShell

(可选)查看队列中的所有 RUNNABLE(可运行)作业

要返回作业队列中处于 RUNNABLE(可运行)状态的所有作业的清单,请运行以下 list-jobs 命令:

aws batch list-jobs --job-queue $myJOBQueue --job-status runnable --output text --query "jobSummaryList[*].[jobId]"

对于 PowerShell,请使用以下命令:

Get-BATJobList -JobQueue $myJOBQueue  -JobStatus RUNNABLE | select -ExpandProperty jobid

以下示例的输出中显示了三个处于 RUNNABLE(可运行)状态的作业:

0cffddb0-8bfa-4ba4-86ba-c5cad59e4529
884d8bdf-6192-4d4c-ac85-c51093460a01
236670e3-127a-4fe1-afd6-3f21cf1fe02e

使用 CancelJob API 取消作业

取消作业队列中所有处于 RUNNABLE(可运行)状态的 AWS Batch 作业,请运行以下 bash 脚本:

for i in $(aws batch list-jobs --job-queue $myJOBQueue --job-status runnable --output text --query "jobSummaryList[*].[jobId]")
do
  echo "Cancel Job: $i"
  aws batch cancel-job --job-id $i --reason "Cancelling job."
  echo "Job $i canceled"
done

对于 PowerShell,请使用以下脚本:

Foreach ($I in Get-BATJobList -JobQueue $myJOBQueue -JobStatus RUNNABLE | select -ExpandProperty jobid) {
    echo "Cancel job $I"
    Stop-BATJob -JobId $I -Reason "Cancelling job."
}

使用 TerminateJob API 终止作业

终止作业队列中的所有作业,包括所有处于 RUNNING(正在运行)状态的作业,请运行以下 bash 脚本:

for state in SUBMITTED PENDING RUNNABLE STARTING RUNNING
do
    for job in $(aws batch list-jobs --job-queue $myJOBQueue --job-status $state --output text --query "jobSummaryList[*].[jobId]")
    do
        echo "Stopping job $job in state $state"
        aws batch terminate-job --reason "Terminating job." --job-id $job
    done
done

对于 PowerShell,请运行以下脚本:

Foreach ($STATE in "SUBMITTED","PENDING","RUNNABLE","STARTING","RUNNING") {
    Foreach ($I in Get-BATJobList -JobQueue $myJOBQueue -JobStatus $STATE | select -ExpandProperty jobid) {
        echo "Stopping job $I in state $STATE"
        Remove-BATJob -JobId $I -Reason "Terminating job." -Force
    }
}
AWS 官方
AWS 官方已更新 1 年前