如何在 AWS Batch 中从我的任务队列取消所有 RUNNABLE 任务?
上次更新日期:2022 年 7 月 14 日
我想取消任务队列中处于 RUNNABLE 状态的所有 AWS Batch 任务。该如何操作?
简短描述
AWS 管理控制台允许您一次仅取消或终止任务队列中的一个 AWS Batch 任务。要从任务队列中取消或终止多个 AWS Batch 任务,您必须使用 AWS Command Line Interface (AWS CLI)。
要取消任务队列中处于 RUNNABLE 状态的所有任务,请按以下步骤操作。
注意:以下过程只能在 Linux 或 macOS 环境中使用。
解决方法
注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
1. 通过运行以下 list-jobs 命令,返回任务队列中处于 RUNNABLE 状态的所有任务的列表:
重要提示:将 myJOBQueue 替换为您的任务队列名称。
$aws batch list-jobs --job-queue myJOBQueue --job-status runnable --output text --query "jobSummaryList[*].[jobId]"
以下是 list-jobs 命令输出的示例,该命令输出包括三个卡在 RUNNABLE 状态的任务:
----------------------------------------------------------------------------------------
"0cffddb0-8bfa-4ba4-86ba-c5cad59e4529"
"884d8bdf-6192-4d4c-ac85-c51093460a01"
"236670e3-127a-4fe1-afd6-3f21cf1fe02e"
----------------------------------------------------------------------------------------
2. 要取消任务队列中处于 RUNNABLE 状态的所有 AWS Batch 任务,请运行以下 bash 脚本:
重要提示:将 myJOBQueue 替换为您的任务队列名称。
取消任务示例 bash 脚本
#! /bin/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
注意:要终止任务队列中的所有任务,包括所有 RUNNING 状态的任务,您可以运行以下 bash 脚本:
终止和取消任务队列中所有 AWS Batch 任务的 bash 脚本示例
#! /bin/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 -ne "Stopping job $job in state $state\t"
aws batch terminate-job --reason "Terminating job." --job-id $job && echo "Done." || echo "Failed."
done
done
重要提示:运行此 bash 脚本将取消队列中尚未进入 STARTING 状态的所有任务。