#!/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 "========================================"