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

如何编写Shell脚本提交Splunk任务并完成后自动下载CSV文件

解决Splunk任务动态等待并自动下载报告的问题

原脚本存在的问题

  • 变量名混乱:jobid和未定义的sid混用,导致无法正确提取任务ID
  • 固定sleep 3600不合理:任务时长不确定,过短会导致下载失败,过长可能被新任务覆盖

修改后的脚本

#!/bin/bash

# 提交Splunk搜索任务并获取返回内容
response=$(curl -sS -k -u username:password "https://XXXXX.splunkcloud.com:8098/XXXXX/jobs/" -d search="search index=\"prod\" source=\"*log*\" earliest=-1d@d latest=-0d@d | timechart count span=1s | sort - count | head 1")

# 精准提取任务ID(适配Splunk API返回的<sid>标签格式)
jobid=$(echo "$response" | grep -oP '(?<=<sid>).*?(?=</sid>)')

if [ -z "$jobid" ]; then
    echo "无法获取任务ID,退出脚本"
    exit 1
fi

echo "任务ID: $jobid,开始等待任务完成..."

# 轮询检查任务状态,直到任务完成或终止
while true; do
    # 查询当前任务状态
    status=$(curl -sS -k -u username:password "https://XXXXX.splunkcloud.com:8098/XXXXX/jobs/$jobid/" | grep -oP '(?<=<dispatchState>).*?(?=</dispatchState>)')
    
    case "$status" in
        "DONE")
            echo "任务已完成,开始下载报告..."
            # 下载CSV格式报告,注意URL参数用引号包裹避免解析错误
            curl -sS -k -u username:password "https://XXXXX.splunkcloud.com:8098/XXXXX/jobs/$jobid/results?output_mode=csv&count=0" > report.csv
            echo "报告已保存到report.csv"
            exit 0
            ;;
        "FAILED"|"CANCELLED")
            echo "任务状态: $status,无法生成报告"
            exit 1
            ;;
        *)
            echo "当前任务状态: $status,等待5秒后重试..."
            sleep 5
            ;;
    esac
done

关键逻辑说明

  1. 正确提取任务ID:用正则匹配精准抓取Splunk API返回的任务ID,解决原脚本变量混乱的问题
  2. 动态状态轮询:循环查询任务的dispatchState状态,适配不同的任务阶段(排队、运行、完成、失败等)
  3. 轻量重试机制:每次状态检查后等待5秒,避免频繁请求Splunk服务
  4. 异常终止处理:无法获取任务ID或任务失败时直接退出,避免无效等待

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:11:13