stop_cnclip_service.sh
4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/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}"
# 查找所有相关的 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
sleep 1
fi
# 最终检查
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}"
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