Files
hzdyjs/backend/start-all-services.sh
T
2025-08-08 20:35:17 +08:00

347 lines
9.9 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# RuoYi 所有服务统一管理脚本 (CentOS)
# 用途: 统一启动、停止、重启、查看所有RuoYi服务的状态
# 包含: ruoyi-admin(8080) + ruoyi-monitor-admin(9090) + ruoyi-snailjob-server(8800)
# =============================================================================
# 颜色配置
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 脚本路径配置
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ADMIN_SCRIPT="$SCRIPT_DIR/start-ruoyi-admin.sh"
MONITOR_SCRIPT="$SCRIPT_DIR/start-ruoyi-monitor.sh"
SNAILJOB_SCRIPT="$SCRIPT_DIR/start-ruoyi-snailjob.sh"
# 服务信息配置
declare -A SERVICES=(
["admin"]="ruoyi-admin:8080:主应用服务"
["monitor"]="ruoyi-monitor-admin:9090:监控中心"
["snailjob"]="ruoyi-snailjob-server:8800:任务调度中心"
)
# 服务启动顺序(考虑依赖关系)
START_ORDER=("admin" "monitor" "snailjob")
# 服务停止顺序(与启动相反)
STOP_ORDER=("snailjob" "monitor" "admin")
# 检查脚本文件是否存在
check_scripts() {
local missing=0
if [ ! -f "$ADMIN_SCRIPT" ]; then
echo -e "${RED}错误: 主应用启动脚本不存在: $ADMIN_SCRIPT${NC}"
missing=1
fi
if [ ! -f "$MONITOR_SCRIPT" ]; then
echo -e "${RED}错误: 监控服务启动脚本不存在: $MONITOR_SCRIPT${NC}"
missing=1
fi
if [ ! -f "$SNAILJOB_SCRIPT" ]; then
echo -e "${RED}错误: 任务调度启动脚本不存在: $SNAILJOB_SCRIPT${NC}"
missing=1
fi
if [ $missing -eq 1 ]; then
echo -e "${YELLOW}请确保所有启动脚本都存在并具有执行权限${NC}"
exit 1
fi
# 确保脚本有执行权限
chmod +x "$ADMIN_SCRIPT" "$MONITOR_SCRIPT" "$SNAILJOB_SCRIPT" 2>/dev/null
}
# 执行单个服务操作
execute_service_action() {
local service=$1
local action=$2
local script=""
case $service in
"admin")
script="$ADMIN_SCRIPT"
;;
"monitor")
script="$MONITOR_SCRIPT"
;;
"snailjob")
script="$SNAILJOB_SCRIPT"
;;
*)
echo -e "${RED}未知服务: $service${NC}"
return 1
;;
esac
if [ -f "$script" ]; then
echo -e "${CYAN}正在对 $service 执行 $action 操作...${NC}"
"$script" "$action"
return $?
else
echo -e "${RED}脚本文件不存在: $script${NC}"
return 1
fi
}
# 启动所有服务
start_all() {
echo -e "${BLUE}==================== 启动所有RuoYi服务 ====================${NC}"
check_scripts
local success=0
local total=${#START_ORDER[@]}
for service in "${START_ORDER[@]}"; do
echo
if execute_service_action "$service" "start"; then
((success++))
echo -e "${GREEN}✓ $service 启动成功${NC}"
# 服务间启动间隔,确保依赖关系
if [ "$service" = "admin" ]; then
echo -e "${YELLOW}等待主应用完全启动...${NC}"
sleep 5
fi
else
echo -e "${RED}✗ $service 启动失败${NC}"
fi
done
echo
echo -e "${BLUE}==================== 启动结果汇总 ====================${NC}"
echo -e "${GREEN}成功启动: $success/$total 个服务${NC}"
if [ $success -eq $total ]; then
echo -e "${GREEN}🎉 所有服务启动成功!${NC}"
echo
echo "访问地址:"
echo " - 主应用: http://localhost:8080"
echo " - 监控中心: http://localhost:9090/admin"
echo " - 任务调度: http://localhost:8800/snail-job"
else
echo -e "${YELLOW}⚠️ 部分服务启动失败,请检查日志${NC}"
fi
}
# 停止所有服务
stop_all() {
echo -e "${BLUE}==================== 停止所有RuoYi服务 ====================${NC}"
check_scripts
local success=0
local total=${#STOP_ORDER[@]}
for service in "${STOP_ORDER[@]}"; do
echo
if execute_service_action "$service" "stop"; then
((success++))
echo -e "${GREEN}✓ $service 停止成功${NC}"
else
echo -e "${YELLOW}⚠️ $service 停止失败或未运行${NC}"
((success++)) # 未运行也算成功
fi
done
echo
echo -e "${BLUE}==================== 停止结果汇总 ====================${NC}"
echo -e "${GREEN}处理完成: $success/$total 个服务${NC}"
echo -e "${GREEN}🛑 所有服务已停止${NC}"
}
# 重启所有服务
restart_all() {
echo -e "${BLUE}==================== 重启所有RuoYi服务 ====================${NC}"
stop_all
echo -e "${YELLOW}等待系统资源释放...${NC}"
sleep 3
start_all
}
# 查看所有服务状态
status_all() {
echo -e "${BLUE}==================== 所有RuoYi服务状态 ====================${NC}"
check_scripts
local running=0
local total=${#START_ORDER[@]}
for service in "${START_ORDER[@]}"; do
echo
if execute_service_action "$service" "status"; then
((running++))
fi
done
echo
echo -e "${BLUE}==================== 状态汇总 ====================${NC}"
echo -e "${GREEN}运行中: $running/$total 个服务${NC}"
# 显示端口占用情况
echo
echo "端口监听状态:"
netstat -tlnp 2>/dev/null | grep -E ":(8080|9090|8800) " | while IFS= read -r line; do
echo " $line"
done | column -t || echo " 无相关端口监听"
}
# 查看所有服务日志
logs_all() {
echo -e "${BLUE}==================== 所有RuoYi服务日志 ====================${NC}"
echo "请选择要查看日志的服务:"
echo " 1) ruoyi-admin (主应用)"
echo " 2) ruoyi-monitor-admin (监控中心)"
echo " 3) ruoyi-snailjob-server (任务调度)"
echo " 4) 查看所有服务的最新日志"
read -p "请输入选择 (1-4): " choice
case $choice in
1)
execute_service_action "admin" "logs"
;;
2)
execute_service_action "monitor" "logs"
;;
3)
execute_service_action "snailjob" "logs"
;;
4)
echo -e "${CYAN}==================== 所有服务最新日志 ====================${NC}"
for service in "${START_ORDER[@]}"; do
echo -e "${YELLOW}--- $service 最新日志 ---${NC}"
case $service in
"admin")
tail -5 /var/log/ruoyi/ruoyi-admin.log 2>/dev/null || echo "日志文件不存在"
;;
"monitor")
tail -5 /var/log/ruoyi/ruoyi-monitor-admin.log 2>/dev/null || echo "日志文件不存在"
;;
"snailjob")
tail -5 /var/log/ruoyi/ruoyi-snailjob-server.log 2>/dev/null || echo "日志文件不存在"
;;
esac
echo
done
;;
*)
echo -e "${RED}无效选择${NC}"
;;
esac
}
# 服务健康检查
health_check() {
echo -e "${BLUE}==================== 服务健康检查 ====================${NC}"
local healthy=0
local total=3
# 检查主应用
echo -n "检查主应用(8080): "
if curl -s --connect-timeout 5 http://localhost:8080 >/dev/null 2>&1; then
echo -e "${GREEN}✓ 健康${NC}"
((healthy++))
else
echo -e "${RED}✗ 异常${NC}"
fi
# 检查监控中心
echo -n "检查监控中心(9090): "
if curl -s --connect-timeout 5 http://localhost:9090/admin >/dev/null 2>&1; then
echo -e "${GREEN}✓ 健康${NC}"
((healthy++))
else
echo -e "${RED}✗ 异常${NC}"
fi
# 检查任务调度
echo -n "检查任务调度(8800): "
if curl -s --connect-timeout 5 http://localhost:8800/snail-job >/dev/null 2>&1; then
echo -e "${GREEN}✓ 健康${NC}"
((healthy++))
else
echo -e "${RED}✗ 异常${NC}"
fi
echo
echo -e "${BLUE}健康状态: $healthy/$total 个服务正常${NC}"
if [ $healthy -eq $total ]; then
echo -e "${GREEN}🎉 所有服务运行正常!${NC}"
else
echo -e "${YELLOW}⚠️ 部分服务异常,建议检查日志${NC}"
fi
}
# 显示帮助信息
usage() {
echo -e "${BLUE}RuoYi 所有服务统一管理脚本${NC}"
echo "用法: $0 {start|stop|restart|status|logs|health|help}"
echo ""
echo "命令说明:"
echo " start - 启动所有服务 (按依赖顺序)"
echo " stop - 停止所有服务 (按相反顺序)"
echo " restart - 重启所有服务"
echo " status - 查看所有服务状态"
echo " logs - 交互式查看服务日志"
echo " health - 服务健康检查"
echo " help - 显示此帮助信息"
echo ""
echo "服务清单:"
echo " 1. ruoyi-admin - 主应用服务 (端口:8080)"
echo " 2. ruoyi-monitor-admin - 监控中心 (端口:9090)"
echo " 3. ruoyi-snailjob-server - 任务调度中心 (端口:8800)"
echo ""
echo "启动顺序: admin → monitor → snailjob"
echo "停止顺序: snailjob → monitor → admin"
echo ""
echo "配置路径:"
echo " 脚本目录: $SCRIPT_DIR"
echo " 日志目录: /var/log/ruoyi/"
echo " PID目录: /var/run/"
}
# 主逻辑
case "$1" in
start)
start_all
;;
stop)
stop_all
;;
restart)
restart_all
;;
status)
status_all
;;
logs)
logs_all
;;
health)
health_check
;;
help|--help|-h)
usage
;;
*)
echo -e "${RED}无效参数: $1${NC}"
echo
usage
exit 1
;;
esac
exit 0