#!/bin/bash # 项目根目录 PROJECT_DIR="/root/xiaozhi-esp32-server-java" TARGET_DIR="$PROJECT_DIR/target" echo "正在停止Java后端服务..." # 自动查找target目录中的JAR文件 JAR_FILE=$(find "$TARGET_DIR" -name "*.jar" -not -name "*.original" -type f | head -1) if [ -z "$JAR_FILE" ]; then echo "警告: 在 $TARGET_DIR 目录中未找到JAR文件" echo "将尝试通过进程名称查找运行中的Java服务..." else # 获取JAR文件名(用于进程查找) APP_NAME=$(basename "$JAR_FILE") # 提取应用名称前缀("-"之前的部分)用于进程匹配 APP_PREFIX=$(echo "$APP_NAME" | cut -d'-' -f1) echo "找到JAR文件: $JAR_FILE" echo "应用前缀: $APP_PREFIX" fi # 查找并杀死相关进程 if [ -n "$APP_PREFIX" ]; then # 使用应用前缀匹配 PID=$(ps -ef | grep "$APP_PREFIX" | grep "\.jar" | grep -v grep | awk '{print $2}') else # 如果没有找到JAR文件,尝试查找所有Java进程中包含xiaozhi的 PID=$(ps -ef | grep "java" | grep "xiaozhi" | grep "\.jar" | grep -v grep | awk '{print $2}') fi if [ -n "$PID" ]; then echo "找到Java服务进程 PID: $PID" echo "正在停止服务..." # 优雅停止 kill $PID sleep 5 # 检查进程是否已停止,如果未停止则强制杀死 if ps -p $PID > /dev/null; then echo "进程仍在运行,强制杀死..." kill -9 $PID sleep 2 # 再次检查 if ps -p $PID > /dev/null; then echo "错误: 无法停止进程 $PID" exit 1 fi fi echo "Java后端服务已成功停止" else echo "未找到运行中的Java后端服务" fi # 清理可能存在的PID文件 if [ -f "$PROJECT_DIR/app.pid" ]; then echo "清理PID文件..." rm -f "$PROJECT_DIR/app.pid" fi echo "停止操作完成"