#!/bin/bash # 生产环境停止脚本 # 用于停止 FastAPI 后端服务 set -e # 遇到错误立即退出 # 获取脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 颜色输出 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color PID_FILE="$SCRIPT_DIR/backend.pid" if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo -e "${YELLOW}🛑 正在停止服务 (PID: $PID)...${NC}" kill "$PID" # 等待进程结束 for i in {1..10}; do if ! ps -p "$PID" > /dev/null 2>&1; then break fi sleep 1 done # 如果还在运行,强制杀死 if ps -p "$PID" > /dev/null 2>&1; then echo -e "${YELLOW}⚠️ 强制停止服务...${NC}" kill -9 "$PID" 2>/dev/null || true fi rm -f "$PID_FILE" echo -e "${GREEN}✅ 服务已停止${NC}" else echo -e "${YELLOW}⚠️ 服务进程不存在 (PID: $PID)${NC}" rm -f "$PID_FILE" fi else # 尝试通过进程名查找 PIDS=$(pgrep -f "uvicorn main:app" || true) if [ -n "$PIDS" ]; then echo -e "${YELLOW}🛑 正在停止服务 (通过进程名查找)...${NC}" echo "$PIDS" | xargs kill 2>/dev/null || true sleep 2 # 如果还在运行,强制杀死 REMAINING=$(pgrep -f "uvicorn main:app" || true) if [ -n "$REMAINING" ]; then echo -e "${YELLOW}⚠️ 强制停止服务...${NC}" echo "$REMAINING" | xargs kill -9 2>/dev/null || true fi echo -e "${GREEN}✅ 服务已停止${NC}" else echo -e "${YELLOW}⚠️ 未找到运行中的服务${NC}" fi fi