#!/bin/bash : << 'EOF' 执行远程脚本,以实现任务的状态监控。 监控机上部署发送通知(企微)的脚本,把结果发送出来。 EOF # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' # 无颜色 # 定义命令映射和函数 declare -A COMMAND_MAP declare -a COMMAND_ORDER # 记录命令注册顺序,用于帮助信息 # 注册命令函数并添加到映射 register_command() { local cmd_name=$1 local cmd_desc=$2 COMMAND_MAP[$cmd_name]=$cmd_desc COMMAND_ORDER+=($cmd_name) } # 执行远程命令的通用函数 execute_remote() { local server=$1 local user=$2 local ssh_opts=$3 local cmd=$4 local desc=$5 echo -e "${YELLOW}执行命令: ${desc}${NC}" echo "----------------------------------------" echo -e "${YELLOW}服务器: ${user}@${server}${NC}" # 执行远程命令 RESULT=$(ssh $ssh_opts $user@$server "$cmd") EXIT_CODE=$? # 输出结果 if [ $EXIT_CODE -eq 0 ]; then echo -e "${GREEN}命令执行成功${NC}" echo "$RESULT" # 执行本地脚本并将远程命令结果作为输入 python3 ./send_to_wecom.py "$RESULT" return 0 else echo -e "${RED}命令执行失败,退出代码: $EXIT_CODE${NC}" return $EXIT_CODE fi } # 定义具体命令函数 cmd_javbus() { local SERVER="170.106.191.35" local USER="root" local SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10" execute_remote "$SERVER" "$USER" "$SSH_OPTS" \ "cd /root/projects/resources && python3 -m src.monitor.check_javbus" \ "检查服务状态" } # 定义具体命令函数 cmd_aabook() { local SERVER="170.106.191.35" local USER="root" local SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10" execute_remote "$SERVER" "$USER" "$SSH_OPTS" \ "cd ~/resources/aabook/src/ && python3 ./check_status.py" \ "检查服务状态" } # 注册命令 register_command "aabook" "查询 aabook 任务进度" register_command "javbus" "查询 javbus 任务进度" # 显示帮助信息 show_help() { echo "用法: $0 [命令1] [命令2] [...]" echo "可用命令:" for cmd in "${COMMAND_ORDER[@]}"; do printf " %-10s %s\n" "$cmd" "${COMMAND_MAP[$cmd]}" done echo echo "示例:" echo " $0 check fetch" echo " $0 backup" } # 主函数 main() { # 检查是否提供了命令参数 if [ $# -eq 0 ]; then show_help exit 1 fi local success=true # 处理每个命令参数 for cmd in "$@"; do # 检查命令是否存在 if [[ -z "${COMMAND_MAP[$cmd]}" ]]; then echo -e "${RED}错误: 未知命令 '$cmd'${NC}" show_help exit 1 fi # 执行对应的命令函数 cmd_${cmd} if [ $? -ne 0 ]; then success=false fi echo done # 输出总体执行结果 if [ "$success" = true ]; then echo -e "${GREEN}所有命令执行成功${NC}" exit 0 else echo -e "${RED}部分命令执行失败${NC}" exit 1 fi } # 执行主函数 main "$@"