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

如何为不同名称的Agent实例分别设置不同日历日期的延迟停止规则

实现不同Name的Agent按指定日期延迟停止的方案

以下为通用实现逻辑和常见场景的可落地代码示例:

核心实现逻辑

  • 首先建立Name参数值-停止触发日期的映射关系,可存储在配置文件、环境变量或调度系统参数组中,避免硬编码方便后续调整
  • 给Agent新增启动时的日期校验逻辑:Agent启动后先读取自身的Name参数,匹配映射表得到对应的停止日期
  • 计算当前系统日期和目标停止日期的时间差,调用系统定时任务/框架自带的延迟执行接口,触发停止操作
  • 增加容错校验:如果匹配不到对应Name的停止日期、目标日期早于当前日期,可配置默认停止规则或者抛出告警日志

常见场景实现示例

场景1:Jenkins Agent(Linux环境)

直接在Agent启动脚本中加入以下逻辑即可:

# 配置Name和对应停止日期的映射,可根据实际需求修改
declare -A STOP_DATE_MAP=(
    ["agent-name-1"]="2024-12-31"
    ["agent-name-2"]="2024-11-30"
    ["agent-name-3"]="2024-10-31"
)
# 获取当前Agent的Name,可根据你实际的参数获取方式调整
AGENT_NAME=$(cat /etc/jenkins/agent_name)
# 匹配停止日期
TARGET_STOP_DATE=${STOP_DATE_MAP[$AGENT_NAME]}
if [ -z "$TARGET_STOP_DATE" ]; then
    echo "未找到对应Agent的停止日期配置,使用默认30天后停止"
    TARGET_STOP_DATE=$(date -d "+30 days" +%Y-%m-%d)
fi
# 计算延迟秒数
STOP_TIMESTAMP=$(date -d "$TARGET_STOP_DATE 23:59:59" +%s)
CURRENT_TIMESTAMP=$(date +%s)
DELAY_SEC=$((STOP_TIMESTAMP - CURRENT_TIMESTAMP))
if [ $DELAY_SEC -le 0 ]; then
    echo "目标停止日期已过,立即停止Agent"
    systemctl stop jenkins-agent
else
    echo "Agent将在${DELAY_SEC}秒后停止,对应日期${TARGET_STOP_DATE}"
    # 后台执行延迟停止
    (sleep $DELAY_SEC && systemctl stop jenkins-agent) &
fi

场景2:自主开发的Python Agent

在Agent的启动入口加入以下逻辑即可:

import time
import threading
from datetime import datetime, timedelta

# 配置映射关系,可根据实际需求修改
stop_date_map = {
    "agent-name-1": "2024-12-31",
    "agent-name-2": "2024-11-30",
    "agent-name-3": "2024-10-31"
}
# 替换为你实际获取Agent Name的逻辑
agent_name = "agent-name-1"

target_stop_date = stop_date_map.get(agent_name)
if not target_stop_date:
    # 自定义默认规则,这里设置为30天后停止
    target_stop_date = (datetime.now() + timedelta(days=30)).strftime("%Y-%m-%d")

# 计算延迟时间
target_dt = datetime.strptime(f"{target_stop_date} 23:59:59", "%Y-%m-%d %H:%M:%S")
delay_sec = (target_dt - datetime.now()).total_seconds()

def delay_stop(sec):
    time.sleep(sec)
    # 替换为你实际的Agent停止逻辑
    exit(0)

if delay_sec <= 0:
    delay_stop(0)
else:
    # 启动异步线程执行延迟停止,不影响Agent主业务运行
    threading.Thread(target=delay_stop, args=(delay_sec,), daemon=True).start()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:36:02