feat :init
This commit is contained in:
65
stop-java.sh
Normal file
65
stop-java.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/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 "停止操作完成"
|
||||
Reference in New Issue
Block a user