Files
ai_wht_wechat/start_all.sh

160 lines
4.8 KiB
Bash
Raw Normal View History

2026-01-06 19:36:42 +08:00
#!/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
2026-01-07 10:42:04 +08:00
# 检查是否安装了Xvfb
if command -v xvfb-run &> /dev/null; then
echo "[Xvfb] 检测到XvfbPython服务将使用虚拟显示运行避免无头模式被检测"
nohup xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" python main.py > ../logs/python_backend_prod.log 2>&1 &
PYTHON_PID=$!
echo "[Python服务] PID: $PYTHON_PID (使用Xvfb虚拟显示)"
else
echo "[警告] 未检测到XvfbPython服务将使用无头模式可能触发验证"
echo "[提示] 安装Xvfb: sudo apt-get install -y xvfb"
nohup python main.py > ../logs/python_backend_prod.log 2>&1 &
PYTHON_PID=$!
echo "[Python服务] PID: $PYTHON_PID (无头模式)"
fi
2026-01-06 19:36:42 +08:00
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