start_clip_api.sh
4.9 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/bin/bash
###############################################################################
# CN-CLIP REST API 启动脚本
#
# 用途:
# 启动 REST API 服务,提供 HTTP 接口供 curl 调用
#
# 使用方法:
# ./scripts/start_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"
API_SCRIPT="${PROJECT_ROOT}/examples/clip_rest_api.py"
PID_FILE="${PROJECT_ROOT}/logs/clip_rest_api.pid"
LOG_FILE="${PROJECT_ROOT}/logs/clip_rest_api.log"
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}启动 CN-CLIP REST API 服务${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# 检查 API 脚本
if [ ! -f "${API_SCRIPT}" ]; then
echo -e "${RED}错误: API 脚本不存在: ${API_SCRIPT}${NC}"
exit 1
fi
# 创建日志目录
mkdir -p "$(dirname "${LOG_FILE}")"
# 检查是否已有服务运行
if [ -f "${PID_FILE}" ]; then
OLD_PID=$(cat "${PID_FILE}")
if ps -p ${OLD_PID} > /dev/null 2>&1; then
echo -e "${YELLOW}警告: REST API 服务已在运行 (PID: ${OLD_PID})${NC}"
echo -e "${YELLOW}如需重启,请先运行: ./scripts/stop_clip_api.sh${NC}"
exit 0
else
echo -e "${YELLOW}清理旧的 PID 文件${NC}"
rm -f "${PID_FILE}"
fi
fi
# 检查端口是否被占用
if lsof -Pi :6000 -sTCP:LISTEN -t >/dev/null 2>&1; then
echo -e "${RED}错误: 端口 6000 已被占用${NC}"
echo -e "${YELLOW}请检查是否有其他服务正在使用该端口${NC}"
lsof -i :6000 | grep LISTEN || true
exit 1
fi
# 检查 conda 环境
if [ -z "${CONDA_DEFAULT_ENV}" ] || [ "${CONDA_DEFAULT_ENV}" != "clip_service" ]; then
echo -e "${YELLOW}激活 clip_service 环境...${NC}"
if [ -f "/home/tw/miniconda3/etc/profile.d/conda.sh" ]; then
source "/home/tw/miniconda3/etc/profile.d/conda.sh"
conda activate clip_service
else
echo -e "${RED}错误: 无法找到 conda${NC}"
exit 1
fi
fi
# 检查依赖
echo -e "${BLUE}检查依赖...${NC}"
python -c "import flask" 2>/dev/null || {
echo -e "${YELLOW}Flask 未安装,正在安装...${NC}"
pip install flask flask-cors scikit-learn
}
# 检查 CN-CLIP 服务
echo -e "${BLUE}检查 CN-CLIP 服务...${NC}"
if ! ps aux | grep "clip_server" | grep -v grep > /dev/null; then
echo -e "${YELLOW}警告: CN-CLIP 服务未运行${NC}"
echo -e "${YELLOW}请先启动: ./scripts/start_cnclip_service.sh${NC}"
read -p "$(echo -e ${YELLOW}是否继续启动 REST API? [y/N]: ${NC})" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 0
fi
fi
# 启动 REST API 服务
echo -e "${BLUE}正在启动 REST API 服务...${NC}"
cd "${PROJECT_ROOT}"
nohup python "${API_SCRIPT}" > "${LOG_FILE}" 2>&1 &
API_PID=$!
echo ${API_PID} > "${PID_FILE}"
# 等待服务启动
echo -e "${YELLOW}等待服务启动...${NC}"
sleep 3
# 检查服务是否启动成功
if ps -p ${API_PID} > /dev/null 2>&1; then
# 检查端口是否监听
if lsof -Pi :6000 -sTCP:LISTEN -t >/dev/null 2>&1; then
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}✓ REST API 服务启动成功!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "服务信息:"
echo -e " PID: ${API_PID}"
echo -e " 端口: 6000"
echo -e " 日志文件: ${LOG_FILE}"
echo ""
echo -e "测试服务:"
echo -e " curl http://localhost:6000/health"
echo ""
echo -e "使用示例:"
echo -e " # 编码文本"
echo -e " curl -X POST http://localhost:6000/encode/text \\"
echo -e " -H 'Content-Type: application/json' \\"
echo -e " -d '{\"texts\": [\"测试文本\"]}'"
echo ""
echo -e " # 编码图像"
echo -e " curl -X POST http://localhost:6000/encode/image \\"
echo -e " -H 'Content-Type: application/json' \\"
echo -e " -d '{\"images\": [\"https://oss.essa.cn/98532128-cf8e-456c-9e30-6f2a5ea0c19f.jpg\"]}'"
echo ""
echo -e "查看日志:"
echo -e " tail -f ${LOG_FILE}"
echo ""
echo -e "停止服务:"
echo -e " ./scripts/stop_clip_api.sh"
echo ""
else
echo -e "${YELLOW}服务已启动,但端口尚未监听,请稍候...${NC}"
echo -e "${YELLOW}查看日志: tail -f ${LOG_FILE}${NC}"
fi
else
echo -e "${RED}========================================${NC}"
echo -e "${RED}✗ 服务启动失败!${NC}"
echo -e "${RED}========================================${NC}"
echo ""
echo -e "请查看日志获取详细错误信息:"
echo -e " tail -f ${LOG_FILE}"
echo ""
rm -f "${PID_FILE}"
exit 1
fi