我想取消或终止我的作业队列中所有处于 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。有关详细信息,请参阅 TerminateJob 和 CancelJob。
在运行这些命令中的任一命令之前,请将 $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
}
}