You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CLI或SDK获取ECS定时任务的起止时间?

获取ECS定时任务的起止时间(CLI/SDK方法)

一、获取定时规则的计划生效起止时间(规则何时开始/停止触发任务)

ECS定时任务依赖EventBridge规则实现调度,规则的计划生效起止时间(即定时任务的执行时间范围)会包含在规则的ScheduleExpression字段中,aws events describe-rule其实会返回该字段,只需从中提取START_TIME和END_TIME参数即可:

CLI方法

执行命令并解析返回的调度表达式:

aws events describe-rule --name <你的规则名称> --query 'ScheduleExpression'

返回示例:

"cron(0 12 * * ? *) START_TIME="2024-01-01T00:00:00Z" END_TIME="2024-12-31T23:59:59Z""

用字符串处理工具快速提取起止时间:

# 提取START_TIME
aws events describe-rule --name <你的规则名称> --query 'ScheduleExpression' | grep -o 'START_TIME="[^"]*"' | cut -d'"' -f2

# 提取END_TIME
aws events describe-rule --name <你的规则名称> --query 'ScheduleExpression' | grep -o 'END_TIME="[^"]*"' | cut -d'"' -f2

SDK方法(以Python boto3为例)

调用接口后解析调度表达式字符串:

import boto3
import re

events_client = boto3.client('events')
response = events_client.describe_rule(Name='<你的规则名称>')
schedule_expr = response['ScheduleExpression']

# 提取起止时间参数
start_time = re.search(r'START_TIME="([^"]*)"', schedule_expr).group(1) if 'START_TIME' in schedule_expr else None
end_time = re.search(r'END_TIME="([^"]*)"', schedule_expr).group(1) if 'END_TIME' in schedule_expr else None

print(f"规则生效开始时间: {start_time}")
print(f"规则生效结束时间: {end_time}")

二、获取ECS任务实际执行的起止时间

如果需要查看每次定时任务触发后,ECS容器实例的实际运行起止时间,需查询ECS任务详情:

CLI方法

  1. 先列出由目标EventBridge规则触发的ECS任务(通过startedBy字段过滤,该字段值为规则的ARN):
aws ecs list-tasks --cluster <你的ECS集群名称> --startedBy <规则ARN>
  1. 用返回的任务ARN查询任务详情,提取起止时间:
aws ecs describe-tasks --cluster <你的ECS集群名称> --tasks <任务ARN> --query 'tasks[*].{任务ARN:taskArn, 启动时间:startedAt, 停止时间:stoppedAt}'

合并为一条命令,自动提取最新任务的起止时间:

TASK_ARN=$(aws ecs list-tasks --cluster <你的ECS集群名称> --startedBy <规则ARN> --query 'taskArns[0]' --output text)
aws ecs describe-tasks --cluster <你的ECS集群名称> --tasks $TASK_ARN --query 'tasks[0].{启动时间:startedAt, 停止时间:stoppedAt}'

SDK方法(以Python boto3为例)

import boto3

ecs_client = boto3.client('ecs')
# 列出目标规则触发的任务
tasks_response = ecs_client.list_tasks(
    cluster='<你的ECS集群名称>',
    startedBy='<规则ARN>'
)

if tasks_response['taskArns']:
    # 查询任务详情
    task_details = ecs_client.describe_tasks(
        cluster='<你的ECS集群名称>',
        tasks=tasks_response['taskArns']
    )['tasks'][0]
    print(f"任务启动时间: {task_details['startedAt']}")
    print(f"任务停止时间: {task_details['stoppedAt'] if 'stoppedAt' in task_details else '任务仍在运行'}")
else:
    print("该规则尚未触发任何ECS任务")

内容的提问来源于stack exchange,提问作者manoman687

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:03:35