#!/bin/bash ############################################################################### # CN-CLIP 服务停止脚本 # # 用途: # 停止由 start_cnclip_service.sh 启动的 CN-CLIP 服务 # # 使用方法: # ./scripts/stop_cnclip_service.sh # ############################################################################### set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 项目路径 PROJECT_ROOT="/data/tw/SearchEngine" LOG_DIR="${PROJECT_ROOT}/logs" PID_FILE="${LOG_DIR}/cnclip_service.pid" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE}停止 CN-CLIP 服务${NC}" echo -e "${BLUE}========================================${NC}" echo "" # 检查 PID 文件是否存在 if [ ! -f "${PID_FILE}" ]; then echo -e "${YELLOW}警告: 未找到 PID 文件: ${PID_FILE}${NC}" echo -e "${YELLOW}CN-CLIP 服务可能未运行或不是通过此脚本启动的${NC}" echo "" # 尝试查找并终止相关进程 echo -e "${YELLOW}尝试查找运行中的 CN-CLIP 进程...${NC}" CLIP_PIDS=$(ps aux | grep "clip_server" | grep -v grep | awk '{print $2}') if [ -z "${CLIP_PIDS}" ]; then echo -e "${GREEN}✓ 未发现运行中的 CN-CLIP 进程${NC}" exit 0 else echo -e "${YELLOW}发现以下 CN-CLIP 进程:${NC}" ps aux | grep "clip_server" | grep -v grep echo "" echo -e "${YELLOW}正在终止这些进程...${NC}" for PID in ${CLIP_PIDS}; do echo -e "${YELLOW}终止进程 ${PID}...${NC}" kill ${PID} 2>/dev/null || true sleep 1 if ps -p ${PID} > /dev/null 2>&1; then echo -e "${YELLOW}进程 ${PID} 仍在运行,强制终止...${NC}" kill -9 ${PID} 2>/dev/null || true fi done echo -e "${GREEN}✓ 所有进程已终止${NC}" exit 0 fi fi # 读取 PID PID="$(cat "${PID_FILE}")" # 检查 PID 是否为空 if [ -z "${PID}" ]; then echo -e "${YELLOW}警告: PID 文件存在但为空${NC}" rm -f "${PID_FILE}" exit 0 fi # 检查进程是否存在 if ! ps -p "${PID}" > /dev/null 2>&1; then echo -e "${YELLOW}警告: 进程 ${PID} 不存在${NC}" echo -e "${YELLOW}清理 PID 文件...${NC}" rm -f "${PID_FILE}" exit 0 fi # 停止服务 echo -e "${BLUE}服务信息:${NC}" echo " PID: ${PID}" echo " PID 文件: ${PID_FILE}" echo "" echo -e "${YELLOW}正在停止服务...${NC}" # 发送 SIGTERM 信号 kill "${PID}" || true sleep 2 # 检查进程是否还在运行 if ps -p "${PID}" > /dev/null 2>&1; then echo -e "${YELLOW}进程仍在运行,发送 SIGKILL...${NC}" kill -9 "${PID}" || true sleep 1 fi # 最终检查 if ps -p "${PID}" > /dev/null 2>&1; then echo -e "${RED}错误: 无法停止进程 ${PID}${NC}" echo -e "${YELLOW}请手动停止: kill -9 ${PID}${NC}" exit 1 else echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}✓ CN-CLIP 服务已停止${NC}" echo -e "${GREEN}========================================${NC}" echo "" rm -f "${PID_FILE}" echo -e "PID 文件已删除: ${PID_FILE}" echo "" echo -e "如需重新启动服务:" echo -e " ./scripts/start_cnclip_service.sh" echo "" fi