java/restart-services.sh
liRQ 39a5d5d4ee 任务:添加监控及服务重启脚本
添加Prometheus/Grafana/Loki监控配置、Promtail配置、业务与监控服务器docker-compose文件以及Bash/PowerShell服务重启脚本
2026-06-25 18:27:47 +08:00

125 lines
3.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 网盘微服务重启脚本 (Linux Bash)
# 功能:检查端口占用 -> 杀死进程 -> 按顺序启动服务
# 配置
JASYPT_PASSWORD="wangpan-secret-key-2024"
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
LOG_DIR="$BASE_DIR/logs"
# 创建日志目录
mkdir -p "$LOG_DIR"
# 服务配置名称、端口、jar路径
declare -a SERVICE_NAMES=("用户服务" "网盘服务" "TMDB服务" "网关服务")
declare -a SERVICE_PORTS=(8081 8082 8083 8888)
declare -a SERVICE_JARS=(
"wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar"
"wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar"
"wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar"
"wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar"
)
echo "========================================"
echo " 网盘微服务重启脚本 (Linux)"
echo "========================================"
echo ""
# 导出环境变量
export JASYPT_ENCRYPTOR_PASSWORD="$JASYPT_PASSWORD"
# 第一步:检查并杀死占用端口的进程
echo "[步骤1] 检查端口占用情况..."
for i in "${!SERVICE_PORTS[@]}"; do
port=${SERVICE_PORTS[$i]}
name=${SERVICE_NAMES[$i]}
# 查找占用端口的进程
pid=$(lsof -ti :$port 2>/dev/null || ss -tlnp | grep ":$port " | awk '{print $NF}' | grep -oP 'pid=\K\d+' | head -1)
if [ -n "$pid" ]; then
echo " 发现端口 $port 被进程 PID: $pid 占用,正在杀死..."
kill -9 $pid 2>/dev/null
if [ $? -eq 0 ]; then
echo " 已杀死进程 PID: $pid"
else
echo " 无法杀死进程 PID: $pid"
fi
sleep 1
else
echo " 端口 $port ($name) 未被占用"
fi
done
echo ""
echo "[步骤2] 等待端口释放..."
sleep 3
# 第二步:按顺序启动服务
echo ""
echo "[步骤3] 按顺序启动服务..."
echo ""
for i in "${!SERVICE_NAMES[@]}"; do
name=${SERVICE_NAMES[$i]}
port=${SERVICE_PORTS[$i]}
jar_path="$BASE_DIR/${SERVICE_JARS[$i]}"
echo "----------------------------------------"
echo "启动 $name (端口: $port)..."
if [ ! -f "$jar_path" ]; then
echo " 错误: 找不到jar文件 $jar_path"
echo " 请先执行 mvn clean install -DskipTests 编译项目"
continue
fi
# 启动服务(后台运行)
nohup java -jar "$jar_path" > "$LOG_DIR/${name}-stdout.log" 2>&1 &
pid=$!
if [ $? -eq 0 ]; then
echo " 已启动 $name (PID: $pid)"
else
echo " 启动失败: $name"
fi
# 等待5秒后启动下一个服务最后一个服务不等待
if [ $i -lt $((${#SERVICE_NAMES[@]} - 1)) ]; then
echo " 等待5秒后启动下一个服务..."
sleep 5
fi
done
echo ""
echo "----------------------------------------"
echo "[步骤4] 验证服务启动状态..."
sleep 5
# 检查服务状态
all_running=true
for i in "${!SERVICE_PORTS[@]}"; do
port=${SERVICE_PORTS[$i]}
name=${SERVICE_NAMES[$i]}
# 检查端口是否在监听
if ss -tln | grep -q ":$port "; then
echo "$name (端口 $port) - 运行中"
else
echo "$name (端口 $port) - 未启动"
all_running=false
fi
done
echo ""
echo "========================================"
if [ "$all_running" = true ]; then
echo " 所有服务启动成功!"
echo " 访问地址: http://localhost:8888"
else
echo " 部分服务启动失败,请检查日志"
echo " 日志目录: $LOG_DIR/"
fi
echo "========================================"