添加Prometheus/Grafana/Loki监控配置、Promtail配置、业务与监控服务器docker-compose文件以及Bash/PowerShell服务重启脚本
125 lines
3.5 KiB
Bash
125 lines
3.5 KiB
Bash
#!/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 "========================================"
|