From 5c1dd6f80c0cdb13656e7ea6510b5b5ee274aef5 Mon Sep 17 00:00:00 2001 From: joy Date: Mon, 28 Jul 2025 17:32:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20scripts/deploy=5Fgpu=5Fmon?= =?UTF-8?q?itor.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/deploy_gpu_monitor.sh | 113 ++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 53 deletions(-) diff --git a/scripts/deploy_gpu_monitor.sh b/scripts/deploy_gpu_monitor.sh index 18c5ccb..c44ec67 100644 --- a/scripts/deploy_gpu_monitor.sh +++ b/scripts/deploy_gpu_monitor.sh @@ -4,6 +4,13 @@ set -euo pipefail IFS=$'\n\t' +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # 恢复默认颜色 + # 配置信息 SCRIPT_URL="http://116.205.97.109/scripts/gpu_metrics.sh" # 脚本下载地址 TARGET_DIR="/opt/scripts" # 脚本存放目录 @@ -17,20 +24,20 @@ NODE_EXPORTER_SERVICE="node_exporter.service" # node_exporter服务名 # 帮助信息 show_help() { - echo "用法: $0 [选项]" - echo "GPU监控脚本部署工具(必须指定--install或--uninstall)" + echo -e "${BLUE}用法: $0 [选项]${NC}" + echo -e "${BLUE}GPU监控脚本部署工具(必须指定--install或--uninstall)${NC}" echo "" - echo "选项:" - echo " --install 安装并配置GPU监控脚本,重启node_exporter" - echo " --uninstall 卸载GPU监控脚本及配置,删除指标文件并重启node_exporter" - echo " --help 显示此帮助信息" + echo -e "${GREEN}选项:${NC}" + echo -e " ${YELLOW}--install${NC} 安装并配置GPU监控脚本,重启node_exporter" + echo -e " ${YELLOW}--uninstall${NC} 卸载GPU监控脚本及配置,删除指标文件并重启node_exporter" + echo -e " ${YELLOW}--help${NC} 显示此帮助信息" echo "" } # 检查是否以root权限运行 check_root() { if [ "$(id -u)" -ne 0 ]; then - echo "错误: 此脚本需要root权限运行,请使用sudo" >&2 + echo -e "${RED}错误: 此脚本需要root权限运行,请使用sudo${NC}" >&2 exit 1 fi } @@ -42,19 +49,19 @@ service_exists() { # 重启node_exporter并检查状态 restart_node_exporter() { - echo "检查node_exporter服务状态..." + echo -e "${BLUE}检查node_exporter服务状态...${NC}" if service_exists "${NODE_EXPORTER_SERVICE}"; then - echo "正在重启node_exporter服务..." + echo -e "${BLUE}正在重启node_exporter服务...${NC}" systemctl restart "${NODE_EXPORTER_SERVICE}" || true # 允许失败,不中断流程 - echo "检查node_exporter状态..." + echo -e "${BLUE}检查node_exporter状态...${NC}" if systemctl is-active --quiet "${NODE_EXPORTER_SERVICE}"; then - echo "node_exporter状态: 运行中" + echo -e "${GREEN}node_exporter状态: 运行中${NC}" else - echo "警告: node_exporter未正常运行,请查看日志:journalctl -u ${NODE_EXPORTER_SERVICE}" >&2 + echo -e "${YELLOW}警告: node_exporter未正常运行,请查看日志:journalctl -u ${NODE_EXPORTER_SERVICE}${NC}" >&2 fi else - echo "警告: node_exporter服务不存在,跳过重启" >&2 + echo -e "${YELLOW}警告: node_exporter服务不存在,跳过重启${NC}" >&2 fi } @@ -64,7 +71,7 @@ add_cron_job() { # 检查任务是否已存在(精确匹配) if crontab -l 2>/dev/null | grep -qxF "${cron_line}"; then - echo "定时任务已存在,跳过添加" + echo -e "${YELLOW}定时任务已存在,跳过添加${NC}" return 0 fi @@ -73,7 +80,7 @@ add_cron_job() { crontab -l 2>/dev/null > "${backup_file}" || true # 添加新任务 - echo "添加定时任务: ${cron_line}" + echo -e "${BLUE}添加定时任务: ${cron_line}${NC}" ( crontab -l 2>/dev/null || true # 获取现有crontab(如果有) echo "${cron_line}" # 添加新任务 @@ -81,13 +88,13 @@ add_cron_job() { # 验证添加结果 if crontab -l 2>/dev/null | grep -qxF "${cron_line}"; then - echo "定时任务添加成功" + echo -e "${GREEN}定时任务添加成功${NC}" else - echo "错误: 定时任务添加失败" >&2 + echo -e "${RED}错误: 定时任务添加失败${NC}" >&2 # 恢复备份 if [ -f "${backup_file}" ]; then crontab "${backup_file}" - echo "已恢复原crontab" + echo -e "${BLUE}已恢复原crontab${NC}" fi return 1 fi @@ -95,28 +102,28 @@ add_cron_job() { # 安装函数 install_script() { - echo "===== 开始安装GPU监控脚本 =====" + echo -e "${GREEN}===== 开始安装GPU监控脚本 =====${NC}" # 1. 清理旧指标文件(避免残留数据) - echo "清理旧指标文件..." + echo -e "${BLUE}清理旧指标文件...${NC}" if [ -f "${METRICS_FILE}" ]; then rm -f "${METRICS_FILE}" - echo "已删除旧指标文件: ${METRICS_FILE}" + echo -e "${GREEN}已删除旧指标文件: ${METRICS_FILE}${NC}" fi # 2. 创建目标目录并下载脚本 mkdir -p "${TARGET_DIR}" cd "${TARGET_DIR}" - echo "正在下载GPU监控脚本..." + echo -e "${BLUE}正在下载GPU监控脚本...${NC}" wget -q -O "${TARGET_SCRIPT}" "${SCRIPT_URL}" || { - echo "错误: 无法从 ${SCRIPT_URL} 下载脚本" >&2 + echo -e "${RED}错误: 无法从 ${SCRIPT_URL} 下载脚本${NC}" >&2 exit 1 } chmod +x "${TARGET_SCRIPT}" # 3. 脚本配置(确保GPU总数为8) - echo "配置脚本参数..." + echo -e "${BLUE}配置脚本参数...${NC}" sed -i 's/EXPECTED_GPUS=".*"/EXPECTED_GPUS="0 1 2 3 4 5 6 7"/' "${TARGET_SCRIPT}" # 4. 准备metrics目录 @@ -124,13 +131,13 @@ install_script() { chmod 755 "${METRICS_DIR}" # 5. 配置定时任务(安全添加,避免重复) - echo "配置定时任务..." + echo -e "${BLUE}配置定时任务...${NC}" add_cron_job || exit 1 # 6. 首次执行脚本生成指标 - echo "测试执行脚本..." + echo -e "${BLUE}测试执行脚本...${NC}" "${TARGET_SCRIPT}" || { - echo "错误: 脚本执行失败,请检查日志: ${LOG_FILE}" >&2 + echo -e "${RED}错误: 脚本执行失败,请检查日志: ${LOG_FILE}${NC}" >&2 exit 1 } @@ -138,20 +145,20 @@ install_script() { restart_node_exporter # 8. 验证结果 - echo "===== 安装完成 =====" - echo "脚本位置: ${TARGET_SCRIPT}" - echo "定时任务: $(crontab -l | grep "${TARGET_SCRIPT}")" - echo "日志文件: ${LOG_FILE}" - echo "指标文件: ${METRICS_FILE}(已生成)" - echo "node_exporter状态: $(systemctl is-active "${NODE_EXPORTER_SERVICE}" 2>/dev/null || echo "未安装")" + echo -e "${GREEN}===== 安装完成 =====${NC}" + echo -e "${BLUE}脚本位置:${NC} ${TARGET_SCRIPT}" + echo -e "${BLUE}定时任务:${NC} $(crontab -l | grep "${TARGET_SCRIPT}")" + echo -e "${BLUE}日志文件:${NC} ${LOG_FILE}" + echo -e "${BLUE}指标文件:${NC} ${METRICS_FILE}${GREEN}(已生成)${NC}" + echo -e "${BLUE}node_exporter状态:${NC} $(systemctl is-active "${NODE_EXPORTER_SERVICE}" 2>/dev/null || echo -e "${YELLOW}未安装${NC}")" } # 卸载函数 uninstall_script() { - echo "===== 开始卸载GPU监控脚本 =====" + echo -e "${YELLOW}===== 开始卸载GPU监控脚本 =====${NC}" # 1. 移除定时任务 - echo "删除定时任务..." + echo -e "${BLUE}删除定时任务...${NC}" local cron_line="${CRON_SCHEDULE} ${TARGET_SCRIPT} >> ${LOG_FILE} 2>&1" if crontab -l 2>/dev/null | grep -qxF "${cron_line}"; then @@ -164,51 +171,51 @@ uninstall_script() { # 验证移除结果 if ! crontab -l 2>/dev/null | grep -qxF "${cron_line}"; then - echo "已成功删除定时任务" + echo -e "${GREEN}已成功删除定时任务${NC}" else - echo "错误: 定时任务删除失败" >&2 + echo -e "${RED}错误: 定时任务删除失败${NC}" >&2 # 恢复备份 crontab "${backup_file}" - echo "已恢复原crontab" + echo -e "${BLUE}已恢复原crontab${NC}" exit 1 fi else - echo "未找到相关定时任务,跳过" + echo -e "${YELLOW}未找到相关定时任务,跳过${NC}" fi # 2. 删除脚本文件 - echo "删除监控脚本..." + echo -e "${BLUE}删除监控脚本...${NC}" if [ -f "${TARGET_SCRIPT}" ]; then rm -f "${TARGET_SCRIPT}" - echo "已删除脚本: ${TARGET_SCRIPT}" + echo -e "${GREEN}已删除脚本: ${TARGET_SCRIPT}${NC}" else - echo "脚本文件不存在,跳过" + echo -e "${YELLOW}脚本文件不存在,跳过${NC}" fi # 3. 删除指标文件 - echo "删除指标文件..." + echo -e "${BLUE}删除指标文件...${NC}" if [ -f "${METRICS_FILE}" ]; then rm -f "${METRICS_FILE}" - echo "已删除指标文件: ${METRICS_FILE}" + echo -e "${GREEN}已删除指标文件: ${METRICS_FILE}${NC}" else - echo "指标文件不存在,跳过" + echo -e "${YELLOW}指标文件不存在,跳过${NC}" fi # 4. 删除日志文件 - echo "删除日志文件..." + echo -e "${BLUE}删除日志文件...${NC}" if [ -f "${LOG_FILE}" ]; then rm -f "${LOG_FILE}" - echo "已删除日志文件: ${LOG_FILE}" + echo -e "${GREEN}已删除日志文件: ${LOG_FILE}${NC}" else - echo "日志文件不存在,跳过" + echo -e "${YELLOW}日志文件不存在,跳过${NC}" fi # 5. 重启node_exporter restart_node_exporter # 6. 验证结果 - echo "===== 卸载完成 =====" - echo "node_exporter状态: $(systemctl is-active "${NODE_EXPORTER_SERVICE}" 2>/dev/null || echo "未安装")" + echo -e "${YELLOW}===== 卸载完成 =====${NC}" + echo -e "${BLUE}node_exporter状态:${NC} $(systemctl is-active "${NODE_EXPORTER_SERVICE}" 2>/dev/null || echo -e "${YELLOW}未安装${NC}")" } # 主逻辑 @@ -216,7 +223,7 @@ check_root # 参数检查 if [ $# -ne 1 ]; then - echo "错误: 必须指定--install或--uninstall" >&2 + echo -e "${RED}错误: 必须指定--install或--uninstall${NC}" >&2 show_help exit 1 fi @@ -234,8 +241,8 @@ case "$1" in exit 0 ;; *) - echo "错误: 未知参数 '$1'" >&2 + echo -e "${RED}错误: 未知参数 '$1'${NC}" >&2 show_help exit 1 ;; -esac \ No newline at end of file +esac