#!/bin/bash ############################################################################### # CN-CLIP REST API 停止脚本 # # 用途: # 停止 REST API 服务 # # 使用方法: # ./scripts/stop_clip_api.sh # ############################################################################### set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # 项目路径 PROJECT_ROOT="/data/tw/SearchEngine" PID_FILE="${PROJECT_ROOT}/logs/clip_rest_api.pid" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE}停止 CN-CLIP REST API 服务${NC}" echo -e "${BLUE}========================================${NC}" echo "" # 检查 PID 文件 if [ ! -f "${PID_FILE}" ]; then echo -e "${YELLOW}警告: 未找到 PID 文件${NC}" echo -e "${YELLOW}REST API 服务可能未运行${NC}" # 尝试查找并终止进程 if ps aux | grep "clip_rest_api.py" | grep -v grep > /dev/null; then echo -e "${YELLOW}发现运行中的 API 进程${NC}" API_PIDS=$(ps aux | grep "clip_rest_api.py" | grep -v grep | awk '{print $2}') echo -e "${YELLOW}正在终止...${NC}" for PID in ${API_PIDS}; do kill ${PID} 2>/dev/null || true done sleep 1 echo -e "${GREEN}✓ 进程已终止${NC}" fi exit 0 fi # 读取 PID PID="$(cat "${PID_FILE}")" # 检查进程 if ps -p "${PID}" > /dev/null 2>&1; then echo -e "${BLUE}服务信息:${NC}" echo " PID: ${PID}" echo "" echo -e "${YELLOW}正在停止服务...${NC}" kill "${PID}" || true sleep 2 # 检查是否还在运行 if ps -p "${PID}" > /dev/null 2>&1; then echo -e "${YELLOW}进程仍在运行,强制终止...${NC}" kill -9 "${PID}" || true sleep 1 fi # 最终检查 if ps -p "${PID}" > /dev/null 2>&1; then echo -e "${RED}错误: 无法停止进程${NC}" exit 1 else echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}✓ REST API 服务已停止${NC}" echo -e "${GREEN}========================================${NC}" fi else echo -e "${YELLOW}警告: 进程 ${PID} 不存在${NC}" fi # 清理 PID 文件 rm -f "${PID_FILE}" echo "" echo -e "${GREEN}PID 文件已删除${NC}"