347 lines
9.9 KiB
Bash
Executable File
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
|