Files
server/stop-java.sh
2025-11-02 19:34:16 +08:00

65 lines
1.8 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
# 项目根目录
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 "停止操作完成"