go20/devops/agent/shells/task_debug.sh

208 lines
6.2 KiB
Bash
Raw Normal View History

2026-03-08 18:05:17 +08:00
#!/bin/bash
# Task Debug Script
# 用于打印任务的详细信息,包括所有环境变量
# 主要用于调试和排查问题
set -e
# 引入公共库
source "${SCRIPT_DIR:-.}/lib.sh"
# 打印分隔线
print_separator() {
log_info "========================================"
}
# 打印标题
print_title() {
print_separator
echo " $1"
print_separator
}
# 打印键值对
print_kv() {
printf "%-30s : %s\n" "$1" "$2"
}
# 主函数
main() {
log_highlight "开始任务调试信息输出"
# 1. 打印任务基本信息
print_title "任务基本信息"
print_kv "任务ID" "${TASK_ID:-未设置}"
print_kv "任务名称" "${TASK_NAME:-未设置}"
print_kv "任务类型" "${TASK_TYPE:-未设置}"
print_kv "任务状态" "${TASK_STATUS:-未设置}"
print_kv "任务描述" "${TASK_DESCRIPTION:-未设置}"
print_kv "执行者" "${TASK_RUN_BY:-未设置}"
print_kv "Agent 环境" "${TASK_AGENT_ENV:-未设置}"
print_kv "调度的 Agent" "${TASK_SCHEDULED_AGENT:-未设置}"
echo ""
# 2. 打印标准环境变量
print_title "标准环境变量"
print_kv "工作目录" "${WORKSPACE:-未设置}"
print_kv "脚本目录" "${SCRIPT_DIR:-未设置}"
print_kv "用户" "${USER:-未设置}"
print_kv "主机名" "${HOSTNAME:-未设置}"
print_kv "PWD" "${PWD:-未设置}"
print_kv "HOME" "${HOME:-未设置}"
print_kv "SHELL" "${SHELL:-未设置}"
echo ""
# 3. 打印任务参数PARAM_ 开头)
print_title "任务参数 (PARAM_*)"
local param_found=false
while IFS='=' read -r name value; do
if [[ $name == PARAM_* ]]; then
param_found=true
# 移除 PARAM_ 前缀显示
local param_name="${name#PARAM_}"
print_kv "$param_name" "$value"
fi
done < <(env | sort)
if [ "$param_found" = false ]; then
echo " (无任务参数)"
fi
echo ""
# 4. 打印任务定义DEFINE_ 开头)
print_title "任务定义 (DEFINE_*)"
local define_found=false
while IFS='=' read -r name value; do
if [[ $name == DEFINE_* ]]; then
define_found=true
# 移除 DEFINE_ 前缀显示
local define_name="${name#DEFINE_}"
print_kv "$define_name" "$value"
fi
done < <(env | sort)
if [ "$define_found" = false ]; then
echo " (无任务定义)"
fi
echo ""
# 5. 打印所有环境变量(按字母排序)
print_title "所有环境变量"
env | sort | while IFS='=' read -r name value; do
# 截断过长的值
if [ ${#value} -gt 100 ]; then
value="${value:0:100}... (truncated)"
fi
print_kv "$name" "$value"
done
echo ""
# 6. 打印系统信息
print_title "系统信息"
print_kv "操作系统" "$(uname -s)"
print_kv "内核版本" "$(uname -r)"
print_kv "架构" "$(uname -m)"
if command -v lsb_release &> /dev/null; then
print_kv "发行版" "$(lsb_release -d | cut -f2-)"
elif [ -f /etc/os-release ]; then
print_kv "发行版" "$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)"
fi
# 打印资源使用情况
if command -v free &> /dev/null; then
local mem_info=$(free -h | grep Mem | awk '{print $3 "/" $2 " (used/total)"}')
print_kv "内存使用" "$mem_info"
fi
if command -v df &> /dev/null; then
local disk_info=$(df -h . | tail -1 | awk '{print $3 "/" $2 " (" $5 " used)"}')
print_kv "磁盘使用" "$disk_info"
fi
print_kv "CPU 核心数" "$(nproc 2>/dev/null || echo 'unknown')"
print_kv "当前时间" "$(date '+%Y-%m-%d %H:%M:%S %Z')"
echo ""
# 7. 打印工作目录内容
print_title "工作目录内容"
if [ -d "${WORKSPACE}" ]; then
print_kv "工作目录路径" "${WORKSPACE}"
echo ""
echo "文件列表:"
ls -lh "${WORKSPACE}" 2>/dev/null | tail -n +2 | while read -r line; do
echo " $line"
done
else
echo " 工作目录不存在: ${WORKSPACE:-未设置}"
fi
echo ""
# 8. 打印网络信息
print_title "网络信息"
if command -v ip &> /dev/null; then
echo "IP 地址:"
ip addr show | grep -E "inet |inet6 " | awk '{print " " $0}'
elif command -v ifconfig &> /dev/null; then
echo "IP 地址:"
ifconfig | grep -E "inet |inet6 " | awk '{print " " $0}'
fi
echo ""
# 9. 打印 Docker 信息(如果可用)
if command -v docker &> /dev/null; then
print_title "Docker 信息"
print_kv "Docker 版本" "$(docker --version 2>/dev/null | cut -d' ' -f3 | tr -d ',')"
# 检查 Docker 是否运行
if docker info &> /dev/null; then
local running_containers=$(docker ps -q | wc -l)
local all_containers=$(docker ps -aq | wc -l)
print_kv "运行中的容器" "$running_containers"
print_kv "总容器数" "$all_containers"
local images_count=$(docker images -q | wc -l)
print_kv "镜像数量" "$images_count"
else
echo " Docker daemon 未运行"
fi
echo ""
fi
# 10. 打印进程信息
print_title "进程信息"
print_kv "当前进程 PID" "$$"
print_kv "父进程 PID" "$PPID"
if command -v ps &> /dev/null; then
echo ""
echo "当前进程树:"
ps auxf 2>/dev/null | grep -E "(PID|$$)" | head -5 | while read -r line; do
echo " $line"
done
fi
echo ""
# 11. 环境变量统计
print_title "环境变量统计"
local total_env=$(env | wc -l)
local param_count=$(env | grep -c "^PARAM_" || echo 0)
local define_count=$(env | grep -c "^DEFINE_" || echo 0)
local task_count=$(env | grep -c "^TASK_" || echo 0)
print_kv "总环境变量数" "$total_env"
print_kv "任务参数数 (PARAM_*)" "$param_count"
print_kv "任务定义数 (DEFINE_*)" "$define_count"
print_kv "任务信息数 (TASK_*)" "$task_count"
echo ""
print_separator
log_success "任务调试信息输出完成"
return 0
}
# 执行主函数
main "$@"
exit $?