This commit is contained in:
zlwu committed 2025-08-08 20:41:08 +08:00
1 parent 600f0c621c
commit fa1a7bcf79
5 files changed
+1 -1074

No files matched your search

@@ -38,7 +38,7 @@ spring.boot.admin.client:
# 增加客户端开关
enabled: true
# 设置 Spring Boot Admin Server 地址
url: http://47.121.125.41:9090/admin
url: http://127.0.0.1:9090/admin
instance:
service-host-type: IP
metadata:
-346
View File
@@ -1,346 +0,0 @@
#!/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
-238
View File
@@ -1,238 +0,0 @@
#!/bin/bash
# =============================================================================
# RuoYi Admin 服务启动脚本 (CentOS)
# 用途: 启动、停止、重启、查看状态 ruoyi-admin.jar
# 端口: 8080 (主应用)
# =============================================================================
# 配置变量
APP_NAME="ruoyi-admin"
JAR_NAME="ruoyi-admin.jar"
JAR_PATH="/opt/ruoyi/admin"
JAR_FILE="$JAR_PATH/$JAR_NAME"
PID_FILE="/var/run/${APP_NAME}.pid"
LOG_DIR="/var/log/ruoyi"
LOG_FILE="$LOG_DIR/${APP_NAME}.log"
JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR"
SPRING_PROFILES="prod"
# 颜色配置
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 创建必要目录
create_dirs() {
sudo mkdir -p "$LOG_DIR"
sudo mkdir -p "$(dirname "$PID_FILE")"
sudo chown -R $(whoami):$(whoami) "$LOG_DIR"
}
# 检查jar文件是否存在
check_jar() {
if [ ! -f "$JAR_FILE" ]; then
echo -e "${RED}错误: JAR文件不存在: $JAR_FILE${NC}"
echo -e "${YELLOW}请确保已将jar包放置到: $JAR_PATH${NC}"
exit 1
fi
}
# 获取进程ID
get_pid() {
if [ -f "$PID_FILE" ]; then
cat "$PID_FILE"
else
ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'
fi
}
# 检查服务状态
is_running() {
local pid=$(get_pid)
if [ -n "$pid" ]; then
if ps -p "$pid" > /dev/null 2>&1; then
return 0
else
# PID文件存在但进程不存在,清理PID文件
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
return 1
fi
else
return 1
fi
}
# 启动服务
start() {
echo -e "${BLUE}==================== 启动 $APP_NAME ====================${NC}"
check_jar
create_dirs
if is_running; then
local pid=$(get_pid)
echo -e "${YELLOW}$APP_NAME 已经在运行中,PID: $pid${NC}"
return 1
fi
echo -e "${GREEN}正在启动 $APP_NAME...${NC}"
echo "JAR文件: $JAR_FILE"
echo "日志文件: $LOG_FILE"
echo "JVM参数: $JVM_OPTS"
echo "Spring环境: $SPRING_PROFILES"
# 启动应用
nohup java $JVM_OPTS \
-jar "$JAR_FILE" \
--spring.profiles.active="$SPRING_PROFILES" \
--logging.file.name="$LOG_FILE" \
> "$LOG_FILE" 2>&1 &
local pid=$!
echo $pid > "$PID_FILE"
# 等待启动
echo -e "${YELLOW}等待应用启动...${NC}"
sleep 3
if is_running; then
echo -e "${GREEN}✓ $APP_NAME 启动成功!${NC}"
echo "PID: $(get_pid)"
echo "端口: 8080"
echo "日志: tail -f $LOG_FILE"
echo "访问: http://localhost:8080"
else
echo -e "${RED}✗ $APP_NAME 启动失败!${NC}"
echo "请查看日志: tail -f $LOG_FILE"
exit 1
fi
}
# 停止服务
stop() {
echo -e "${BLUE}==================== 停止 $APP_NAME ====================${NC}"
if ! is_running; then
echo -e "${YELLOW}$APP_NAME 未运行${NC}"
return 1
fi
local pid=$(get_pid)
echo -e "${GREEN}正在停止 $APP_NAME,PID: $pid${NC}"
# 优雅停止
kill "$pid"
# 等待进程停止
local count=0
while is_running && [ $count -lt 30 ]; do
sleep 1
count=$((count + 1))
echo -n "."
done
echo
if is_running; then
echo -e "${YELLOW}优雅停止超时,强制终止进程...${NC}"
kill -9 "$pid"
sleep 2
fi
if is_running; then
echo -e "${RED}✗ $APP_NAME 停止失败!${NC}"
exit 1
else
echo -e "${GREEN}✓ $APP_NAME 已停止${NC}"
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
fi
}
# 重启服务
restart() {
echo -e "${BLUE}==================== 重启 $APP_NAME ====================${NC}"
stop
sleep 2
start
}
# 查看状态
status() {
echo -e "${BLUE}==================== $APP_NAME 状态 ====================${NC}"
if is_running; then
local pid=$(get_pid)
echo -e "${GREEN}✓ $APP_NAME 正在运行${NC}"
echo "PID: $pid"
echo "端口: 8080"
echo "内存使用:"
ps -p "$pid" -o pid,ppid,etime,pmem,pcpu,comm --no-headers
echo "网络端口:"
netstat -tlnp 2>/dev/null | grep ":8080 " || echo "端口8080未监听"
else
echo -e "${RED}✗ $APP_NAME 未运行${NC}"
fi
echo "最近日志:"
if [ -f "$LOG_FILE" ]; then
tail -10 "$LOG_FILE"
else
echo "日志文件不存在: $LOG_FILE"
fi
}
# 查看日志
logs() {
echo -e "${BLUE}==================== $APP_NAME 日志 ====================${NC}"
if [ -f "$LOG_FILE" ]; then
tail -f "$LOG_FILE"
else
echo -e "${RED}日志文件不存在: $LOG_FILE${NC}"
fi
}
# 显示帮助信息
usage() {
echo -e "${BLUE}RuoYi Admin 服务管理脚本${NC}"
echo "用法: $0 {start|stop|restart|status|logs}"
echo ""
echo "命令说明:"
echo " start - 启动服务"
echo " stop - 停止服务"
echo " restart - 重启服务"
echo " status - 查看状态"
echo " logs - 查看实时日志"
echo ""
echo "配置信息:"
echo " 应用名称: $APP_NAME"
echo " JAR文件: $JAR_FILE"
echo " PID文件: $PID_FILE"
echo " 日志文件: $LOG_FILE"
echo " 服务端口: 8080"
}
# 主逻辑
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
logs)
logs
;;
*)
usage
exit 1
;;
esac
exit 0
-244
View File
@@ -1,244 +0,0 @@
#!/bin/bash
# =============================================================================
# RuoYi Monitor Admin 监控服务启动脚本 (CentOS)
# 用途: 启动、停止、重启、查看状态 ruoyi-monitor-admin.jar
# 端口: 9090 (监控中心)
# =============================================================================
# 配置变量
APP_NAME="ruoyi-monitor-admin"
JAR_NAME="ruoyi-monitor-admin.jar"
JAR_PATH="/opt/ruoyi/monitor"
JAR_FILE="$JAR_PATH/$JAR_NAME"
PID_FILE="/var/run/${APP_NAME}.pid"
LOG_DIR="/var/log/ruoyi"
LOG_FILE="$LOG_DIR/${APP_NAME}.log"
JVM_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR"
SPRING_PROFILES="prod"
# 颜色配置
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 创建必要目录
create_dirs() {
sudo mkdir -p "$LOG_DIR"
sudo mkdir -p "$(dirname "$PID_FILE")"
sudo chown -R $(whoami):$(whoami) "$LOG_DIR"
}
# 检查jar文件是否存在
check_jar() {
if [ ! -f "$JAR_FILE" ]; then
echo -e "${RED}错误: JAR文件不存在: $JAR_FILE${NC}"
echo -e "${YELLOW}请确保已将jar包放置到: $JAR_PATH${NC}"
exit 1
fi
}
# 获取进程ID
get_pid() {
if [ -f "$PID_FILE" ]; then
cat "$PID_FILE"
else
ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'
fi
}
# 检查服务状态
is_running() {
local pid=$(get_pid)
if [ -n "$pid" ]; then
if ps -p "$pid" > /dev/null 2>&1; then
return 0
else
# PID文件存在但进程不存在,清理PID文件
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
return 1
fi
else
return 1
fi
}
# 启动服务
start() {
echo -e "${BLUE}==================== 启动 $APP_NAME ====================${NC}"
check_jar
create_dirs
if is_running; then
local pid=$(get_pid)
echo -e "${YELLOW}$APP_NAME 已经在运行中,PID: $pid${NC}"
return 1
fi
echo -e "${GREEN}正在启动 $APP_NAME...${NC}"
echo "JAR文件: $JAR_FILE"
echo "日志文件: $LOG_FILE"
echo "JVM参数: $JVM_OPTS"
echo "Spring环境: $SPRING_PROFILES"
# 启动应用
nohup java $JVM_OPTS \
-jar "$JAR_FILE" \
--spring.profiles.active="$SPRING_PROFILES" \
--logging.file.name="$LOG_FILE" \
> "$LOG_FILE" 2>&1 &
local pid=$!
echo $pid > "$PID_FILE"
# 等待启动
echo -e "${YELLOW}等待应用启动...${NC}"
sleep 3
if is_running; then
echo -e "${GREEN}✓ $APP_NAME 启动成功!${NC}"
echo "PID: $(get_pid)"
echo "端口: 9090"
echo "日志: tail -f $LOG_FILE"
echo "访问: http://localhost:9090/admin"
echo "说明: 这是Spring Boot Admin监控中心"
else
echo -e "${RED}✗ $APP_NAME 启动失败!${NC}"
echo "请查看日志: tail -f $LOG_FILE"
exit 1
fi
}
# 停止服务
stop() {
echo -e "${BLUE}==================== 停止 $APP_NAME ====================${NC}"
if ! is_running; then
echo -e "${YELLOW}$APP_NAME 未运行${NC}"
return 1
fi
local pid=$(get_pid)
echo -e "${GREEN}正在停止 $APP_NAME,PID: $pid${NC}"
# 优雅停止
kill "$pid"
# 等待进程停止
local count=0
while is_running && [ $count -lt 30 ]; do
sleep 1
count=$((count + 1))
echo -n "."
done
echo
if is_running; then
echo -e "${YELLOW}优雅停止超时,强制终止进程...${NC}"
kill -9 "$pid"
sleep 2
fi
if is_running; then
echo -e "${RED}✗ $APP_NAME 停止失败!${NC}"
exit 1
else
echo -e "${GREEN}✓ $APP_NAME 已停止${NC}"
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
fi
}
# 重启服务
restart() {
echo -e "${BLUE}==================== 重启 $APP_NAME ====================${NC}"
stop
sleep 2
start
}
# 查看状态
status() {
echo -e "${BLUE}==================== $APP_NAME 状态 ====================${NC}"
if is_running; then
local pid=$(get_pid)
echo -e "${GREEN}✓ $APP_NAME 正在运行${NC}"
echo "PID: $pid"
echo "端口: 9090"
echo "内存使用:"
ps -p "$pid" -o pid,ppid,etime,pmem,pcpu,comm --no-headers
echo "网络端口:"
netstat -tlnp 2>/dev/null | grep ":9090 " || echo "端口9090未监听"
else
echo -e "${RED}✗ $APP_NAME 未运行${NC}"
fi
echo "最近日志:"
if [ -f "$LOG_FILE" ]; then
tail -10 "$LOG_FILE"
else
echo "日志文件不存在: $LOG_FILE"
fi
}
# 查看日志
logs() {
echo -e "${BLUE}==================== $APP_NAME 日志 ====================${NC}"
if [ -f "$LOG_FILE" ]; then
tail -f "$LOG_FILE"
else
echo -e "${RED}日志文件不存在: $LOG_FILE${NC}"
fi
}
# 显示帮助信息
usage() {
echo -e "${BLUE}RuoYi Monitor Admin 监控服务管理脚本${NC}"
echo "用法: $0 {start|stop|restart|status|logs}"
echo ""
echo "命令说明:"
echo " start - 启动服务"
echo " stop - 停止服务"
echo " restart - 重启服务"
echo " status - 查看状态"
echo " logs - 查看实时日志"
echo ""
echo "配置信息:"
echo " 应用名称: $APP_NAME"
echo " JAR文件: $JAR_FILE"
echo " PID文件: $PID_FILE"
echo " 日志文件: $LOG_FILE"
echo " 服务端口: 9090"
echo " 访问地址: http://localhost:9090/admin"
echo ""
echo "服务说明:"
echo " 这是Spring Boot Admin监控中心,用于监控主应用的运行状态"
echo " 需要在主应用启动后再启动此服务"
}
# 主逻辑
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
logs)
logs
;;
*)
usage
exit 1
;;
esac
exit 0
-245
View File
@@ -1,245 +0,0 @@
#!/bin/bash
# =============================================================================
# RuoYi SnailJob Server 任务调度服务启动脚本 (CentOS)
# 用途: 启动、停止、重启、查看状态 ruoyi-snailjob-server.jar
# 端口: 8800 (任务调度中心)
# =============================================================================
# 配置变量
APP_NAME="ruoyi-snailjob-server"
JAR_NAME="ruoyi-snailjob-server.jar"
JAR_PATH="/opt/ruoyi/snailjob"
JAR_FILE="$JAR_PATH/$JAR_NAME"
PID_FILE="/var/run/${APP_NAME}.pid"
LOG_DIR="/var/log/ruoyi"
LOG_FILE="$LOG_DIR/${APP_NAME}.log"
JVM_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR"
SPRING_PROFILES="prod"
# 颜色配置
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 创建必要目录
create_dirs() {
sudo mkdir -p "$LOG_DIR"
sudo mkdir -p "$(dirname "$PID_FILE")"
sudo chown -R $(whoami):$(whoami) "$LOG_DIR"
}
# 检查jar文件是否存在
check_jar() {
if [ ! -f "$JAR_FILE" ]; then
echo -e "${RED}错误: JAR文件不存在: $JAR_FILE${NC}"
echo -e "${YELLOW}请确保已将jar包放置到: $JAR_PATH${NC}"
exit 1
fi
}
# 获取进程ID
get_pid() {
if [ -f "$PID_FILE" ]; then
cat "$PID_FILE"
else
ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'
fi
}
# 检查服务状态
is_running() {
local pid=$(get_pid)
if [ -n "$pid" ]; then
if ps -p "$pid" > /dev/null 2>&1; then
return 0
else
# PID文件存在但进程不存在,清理PID文件
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
return 1
fi
else
return 1
fi
}
# 启动服务
start() {
echo -e "${BLUE}==================== 启动 $APP_NAME ====================${NC}"
check_jar
create_dirs
if is_running; then
local pid=$(get_pid)
echo -e "${YELLOW}$APP_NAME 已经在运行中,PID: $pid${NC}"
return 1
fi
echo -e "${GREEN}正在启动 $APP_NAME...${NC}"
echo "JAR文件: $JAR_FILE"
echo "日志文件: $LOG_FILE"
echo "JVM参数: $JVM_OPTS"
echo "Spring环境: $SPRING_PROFILES"
# 启动应用
nohup java $JVM_OPTS \
-jar "$JAR_FILE" \
--spring.profiles.active="$SPRING_PROFILES" \
--logging.file.name="$LOG_FILE" \
> "$LOG_FILE" 2>&1 &
local pid=$!
echo $pid > "$PID_FILE"
# 等待启动
echo -e "${YELLOW}等待应用启动...${NC}"
sleep 3
if is_running; then
echo -e "${GREEN}✓ $APP_NAME 启动成功!${NC}"
echo "PID: $(get_pid)"
echo "端口: 8800"
echo "日志: tail -f $LOG_FILE"
echo "访问: http://localhost:8800/snail-job"
echo "说明: 这是SnailJob分布式任务调度中心"
else
echo -e "${RED}✗ $APP_NAME 启动失败!${NC}"
echo "请查看日志: tail -f $LOG_FILE"
exit 1
fi
}
# 停止服务
stop() {
echo -e "${BLUE}==================== 停止 $APP_NAME ====================${NC}"
if ! is_running; then
echo -e "${YELLOW}$APP_NAME 未运行${NC}"
return 1
fi
local pid=$(get_pid)
echo -e "${GREEN}正在停止 $APP_NAME,PID: $pid${NC}"
# 优雅停止
kill "$pid"
# 等待进程停止
local count=0
while is_running && [ $count -lt 30 ]; do
sleep 1
count=$((count + 1))
echo -n "."
done
echo
if is_running; then
echo -e "${YELLOW}优雅停止超时,强制终止进程...${NC}"
kill -9 "$pid"
sleep 2
fi
if is_running; then
echo -e "${RED}✗ $APP_NAME 停止失败!${NC}"
exit 1
else
echo -e "${GREEN}✓ $APP_NAME 已停止${NC}"
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
fi
}
# 重启服务
restart() {
echo -e "${BLUE}==================== 重启 $APP_NAME ====================${NC}"
stop
sleep 2
start
}
# 查看状态
status() {
echo -e "${BLUE}==================== $APP_NAME 状态 ====================${NC}"
if is_running; then
local pid=$(get_pid)
echo -e "${GREEN}✓ $APP_NAME 正在运行${NC}"
echo "PID: $pid"
echo "端口: 8800"
echo "内存使用:"
ps -p "$pid" -o pid,ppid,etime,pmem,pcpu,comm --no-headers
echo "网络端口:"
netstat -tlnp 2>/dev/null | grep ":8800 " || echo "端口8800未监听"
else
echo -e "${RED}✗ $APP_NAME 未运行${NC}"
fi
echo "最近日志:"
if [ -f "$LOG_FILE" ]; then
tail -10 "$LOG_FILE"
else
echo "日志文件不存在: $LOG_FILE"
fi
}
# 查看日志
logs() {
echo -e "${BLUE}==================== $APP_NAME 日志 ====================${NC}"
if [ -f "$LOG_FILE" ]; then
tail -f "$LOG_FILE"
else
echo -e "${RED}日志文件不存在: $LOG_FILE${NC}"
fi
}
# 显示帮助信息
usage() {
echo -e "${BLUE}RuoYi SnailJob Server 任务调度服务管理脚本${NC}"
echo "用法: $0 {start|stop|restart|status|logs}"
echo ""
echo "命令说明:"
echo " start - 启动服务"
echo " stop - 停止服务"
echo " restart - 重启服务"
echo " status - 查看状态"
echo " logs - 查看实时日志"
echo ""
echo "配置信息:"
echo " 应用名称: $APP_NAME"
echo " JAR文件: $JAR_FILE"
echo " PID文件: $PID_FILE"
echo " 日志文件: $LOG_FILE"
echo " 服务端口: 8800"
echo " 访问地址: http://localhost:8800/snail-job"
echo ""
echo "服务说明:"
echo " 这是SnailJob分布式任务调度中心,用于管理和调度定时任务"
echo " 提供任务执行、监控、日志查看等功能"
echo " 可以独立于主应用运行"
}
# 主逻辑
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
logs)
logs
;;
*)
usage
exit 1
;;
esac
exit 0