Files
devops/tools/monitor.sh
2025-06-26 16:35:19 +08:00

137 lines
3.2 KiB
Bash

#!/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 "$@"