Files
ai_wht_wechat/start_all.sh
2026-01-06 19:36:42 +08:00

149 lines
4.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
echo "========================================"
echo " AI小红书项目 - 启动所有服务(生产环境)"
echo "========================================"
echo
# 检查Go环境
if ! command -v go &> /dev/null; then
echo "[错误] 未检测到Go环境请先安装Go"
exit 1
fi
# 检查Python环境
if ! command -v python3 &> /dev/null; then
echo "[错误] 未检测到Python环境请先安装Python3"
exit 1
fi
# 关闭已运行的服务
echo "[准备] 检查并关闭已运行的服务..."
# 从 PID 文件读取并关闭服务
if [ -f "logs/go_backend_prod.pid" ]; then
OLD_GO_PID=$(cat logs/go_backend_prod.pid)
if kill -0 $OLD_GO_PID 2>/dev/null; then
echo "[信息] 关闭旧的Go服务 (PID: $OLD_GO_PID)"
kill -9 $OLD_GO_PID 2>/dev/null
sleep 1
fi
rm -f logs/go_backend_prod.pid
fi
if [ -f "logs/python_backend_prod.pid" ]; then
OLD_PYTHON_PID=$(cat logs/python_backend_prod.pid)
if kill -0 $OLD_PYTHON_PID 2>/dev/null; then
echo "[信息] 关闭旧的Python服务 (PID: $OLD_PYTHON_PID)"
kill -9 $OLD_PYTHON_PID 2>/dev/null
sleep 1
fi
rm -f logs/python_backend_prod.pid
fi
# 强制清理查找并杀掉所有相关的Go进程
echo "[检查] 查找并清理残留的Go服务进程..."
GO_PIDS=$(ps aux | grep "[g]o run main.go" | awk '{print $2}')
if [ ! -z "$GO_PIDS" ]; then
echo "[清理] 发现残留Go进程: $GO_PIDS"
echo $GO_PIDS | xargs kill -9 2>/dev/null
sleep 1
fi
# 强制清理查找并杀掉所有相关的Python进程只杀backend目录下的main.py
echo "[检查] 查找并清理残留的Python服务进程..."
PYTHON_PIDS=$(ps aux | grep "[p]ython.*main.py" | grep backend | awk '{print $2}')
if [ ! -z "$PYTHON_PIDS" ]; then
echo "[清理] 发现残留Python进程: $PYTHON_PIDS"
echo $PYTHON_PIDS | xargs kill -9 2>/dev/null
sleep 1
fi
# 检查并清理端口占用8070端口 - Go服务
echo "[检查] 检查端口8070占用情况..."
PORT_8070_PID=$(lsof -ti:8070 2>/dev/null)
if [ ! -z "$PORT_8070_PID" ]; then
echo "[清理] 端口8070被占用 (PID: $PORT_8070_PID),正在清理..."
kill -9 $PORT_8070_PID 2>/dev/null
sleep 1
fi
# 检查并清理端口占用8020端口 - Python服务
echo "[检查] 检查端口8020占用情况..."
PORT_8020_PID=$(lsof -ti:8020 2>/dev/null)
if [ ! -z "$PORT_8020_PID" ]; then
echo "[清理] 端口8020被占用 (PID: $PORT_8020_PID),正在清理..."
kill -9 $PORT_8020_PID 2>/dev/null
sleep 1
fi
echo "[完成] 已关闭旧服务并清理端口占用"
echo
# 检查Python虚拟环境
if [ ! -d "backend/venv" ]; then
echo "[警告] Python虚拟环境不存在正在创建..."
cd backend
python3 -m venv venv
source venv/bin/activate
echo "[信息] 正在安装Python依赖..."
pip install -r requirements.txt
cd ..
echo "[成功] Python虚拟环境创建完成"
echo
fi
# 创建日志目录
mkdir -p logs
# 启动Go后端服务
echo "[1/2] 正在启动Go后端服务生产环境..."
cd go_backend
go mod tidy
nohup go run main.go -env=prod > ../logs/go_backend_prod.log 2>&1 &
GO_PID=$!
echo "[Go服务] PID: $GO_PID"
cd ..
# 等待2秒
sleep 2
# 启动Python服务
echo "[2/2] 正在启动Python服务生产环境..."
cd backend
source venv/bin/activate
export ENV=prod
nohup python main.py > ../logs/python_backend_prod.log 2>&1 &
PYTHON_PID=$!
echo "[Python服务] PID: $PYTHON_PID"
cd ..
echo
echo "========================================"
echo " 所有服务启动完成!(生产环境)"
echo "========================================"
echo
echo "[Go服务] PID: $GO_PID | 端口: 8070 (生产环境)"
echo "[Python服务] PID: $PYTHON_PID | 端口: 8020 (生产环境)"
echo
echo "日志文件:"
echo " Go服务: logs/go_backend_prod.log"
echo " Python服务: logs/python_backend_prod.log"
echo
echo "停止服务命令:"
echo " kill $GO_PID $PYTHON_PID"
echo
echo "查看日志:"
echo " tail -f logs/go_backend_prod.log"
echo " tail -f logs/python_backend_prod.log"
echo
echo "注意:使用 config.prod.yaml 生产配置"
echo
# 保存PID到文件方便后续停止
echo $GO_PID > logs/go_backend_prod.pid
echo $PYTHON_PID > logs/python_backend_prod.pid
echo "PID已保存到 logs/*_prod.pid 文件"
echo