Blame view

scripts/stop_cnclip_service.sh 4.12 KB
40f1e391   tangwang   cnclip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  #!/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
  
  # 项目路径
d1d356f8   tangwang   脚本优化
24
  PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
40f1e391   tangwang   cnclip
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  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}"
  
74cca190   tangwang   cnclip
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  # 查找所有相关的 clip_server 进程(通过配置文件路径)
  CONFIG_FILE="torch-flow-temp.yml"
  ALL_PIDS=$(ps aux | grep "clip_server.*${CONFIG_FILE}" | grep -v grep | awk '{print $2}')
  
  if [ -z "${ALL_PIDS}" ]; then
      # 如果没有找到,至少尝试停止 PID 文件中的进程
      ALL_PIDS="${PID}"
  fi
  
  # 终止所有相关进程
  for P in ${ALL_PIDS}; do
      if ps -p "${P}" > /dev/null 2>&1; then
          echo -e "${YELLOW}终止进程 ${P}...${NC}"
          kill "${P}" 2>/dev/null || true
      fi
  done
  
  # 等待进程退出
  sleep 3
  
  # 检查是否还有进程在运行,如果有则强制终止
  REMAINING_PIDS=$(ps aux | grep "clip_server.*${CONFIG_FILE}" | grep -v grep | awk '{print $2}')
  if [ -n "${REMAINING_PIDS}" ]; then
      echo -e "${YELLOW}发现仍在运行的进程,强制终止...${NC}"
      for P in ${REMAINING_PIDS}; do
          echo -e "${YELLOW}强制终止进程 ${P}...${NC}"
          kill -9 "${P}" 2>/dev/null || true
      done
40f1e391   tangwang   cnclip
120
121
122
123
      sleep 1
  fi
  
  # 最终检查
74cca190   tangwang   cnclip
124
125
126
127
  FINAL_CHECK=$(ps aux | grep "clip_server.*${CONFIG_FILE}" | grep -v grep | wc -l)
  if [ "${FINAL_CHECK}" -gt 0 ]; then
      echo -e "${RED}错误: 仍有进程无法停止${NC}"
      echo -e "${YELLOW}请手动检查: ps aux | grep clip_server${NC}"
40f1e391   tangwang   cnclip
128
129
130
131
132
133
134
135
136
137
138
139
140
      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