177 lines
4.6 KiB
Bash
177 lines
4.6 KiB
Bash
#!/bin/bash
|
||
# YG_FT_Base 统一启动脚本
|
||
# 同时启动后端 API 服务和 Web 静态服务器
|
||
# 使用方法: bash start_all.sh
|
||
|
||
# 自动修复脚本换行符
|
||
if grep -q $'\r' "$0"; then
|
||
echo "检测到 Windows 换行符,自动修复中..."
|
||
sed -i 's/\r$//' "$0"
|
||
echo "修复完成,重新执行脚本..."
|
||
exec "$0"
|
||
fi
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
cd "$SCRIPT_DIR"
|
||
|
||
echo "===================================="
|
||
echo "YG_FT_Base 统一启动脚本"
|
||
echo "===================================="
|
||
echo ""
|
||
|
||
# 读取配置
|
||
CONFIG_FILE="$SCRIPT_DIR/config.yaml"
|
||
if [ -f "$CONFIG_FILE" ]; then
|
||
API_PORT=$(python3 -c "import yaml; print(yaml.safe_load(open('$CONFIG_FILE'))['app'].get('port', 7861))" 2>/dev/null)
|
||
WEB_PORT=$(python3 -c "import yaml; print(yaml.safe_load(open('$CONFIG_FILE'))['app'].get('web_port', 7862))" 2>/dev/null)
|
||
[ -z "$API_PORT" ] && API_PORT=7861
|
||
[ -z "$WEB_PORT" ] && WEB_PORT=7862
|
||
else
|
||
API_PORT=7861
|
||
WEB_PORT=7862
|
||
fi
|
||
|
||
echo "📦 端口配置:"
|
||
echo " - 后端 API: $API_PORT"
|
||
echo " - Web 服务器: $WEB_PORT"
|
||
echo ""
|
||
|
||
# 检查端口是否已被占用
|
||
check_port() {
|
||
if lsof -i:$1 &> /dev/null || netstat -tuln | grep -q ":$1 " 2>/dev/null; then
|
||
return 1
|
||
fi
|
||
return 0
|
||
}
|
||
|
||
# 启动后端 API 服务
|
||
start_api() {
|
||
echo "🚀 启动后端 API 服务..."
|
||
if [ -f "requirements.txt" ]; then
|
||
if [ -d "B_venv" ]; then
|
||
source B_venv/bin/activate
|
||
else
|
||
echo "⚠️ 虚拟环境不存在,请先运行 create_venv.sh 创建"
|
||
return 1
|
||
fi
|
||
fi
|
||
|
||
# 检查端口
|
||
if ! check_port $API_PORT; then
|
||
echo "❌ 端口 $API_PORT 已被占用,后端服务可能已在运行"
|
||
return 1
|
||
fi
|
||
|
||
LOG_DIR="$SCRIPT_DIR/logs/$(date +%Y-%m-%d)"
|
||
mkdir -p "$LOG_DIR"
|
||
python src/main.py > "$LOG_DIR/api.log" 2>&1 &
|
||
API_PID=$!
|
||
echo "✅ 后端服务已启动 (PID: $API_PID, 端口: $API_PORT)"
|
||
echo "$API_PID" > /tmp/ygft_api.pid
|
||
}
|
||
|
||
# 启动 Web 静态服务器
|
||
start_web() {
|
||
echo ""
|
||
echo "🚀 启动 Web 静态服务器..."
|
||
cd "$SCRIPT_DIR/web"
|
||
|
||
# 检查端口
|
||
if ! check_port $WEB_PORT; then
|
||
echo "⚠️ 端口 $WEB_PORT 已被占用,Web 服务可能已在运行"
|
||
return 1
|
||
fi
|
||
|
||
python3 -m http.server $WEB_PORT &
|
||
WEB_PID=$!
|
||
echo "✅ Web 服务已启动 (PID: $WEB_PID, 端口: $WEB_PORT)"
|
||
echo "$WEB_PID" > /tmp/ygft_web.pid
|
||
}
|
||
|
||
# 停止服务
|
||
stop_all() {
|
||
echo ""
|
||
echo "🛑 停止所有服务..."
|
||
|
||
if [ -f /tmp/ygft_api.pid ]; then
|
||
kill $(cat /tmp/ygft_api.pid) 2>/dev/null
|
||
rm /tmp/ygft_api.pid
|
||
echo "✅ 后端服务已停止"
|
||
fi
|
||
|
||
if [ -f /tmp/ygft_web.pid ]; then
|
||
kill $(cat /tmp/ygft_web.pid) 2>/dev/null
|
||
rm /tmp/ygft_web.pid
|
||
echo "✅ Web 服务已停止"
|
||
fi
|
||
|
||
# 清理可能残留的进程
|
||
pkill -f "src/main.py" 2>/dev/null
|
||
pkill -f "http.server $WEB_PORT" 2>/dev/null
|
||
}
|
||
|
||
# 显示状态
|
||
status() {
|
||
echo ""
|
||
echo "📊 服务状态:"
|
||
echo ""
|
||
|
||
if [ -f /tmp/ygft_api.pid ] && kill -0 $(cat /tmp/ygft_api.pid) 2>/dev/null; then
|
||
echo "✅ 后端 API: 运行中 (PID: $(cat /tmp/ygft_api.pid), 端口: $API_PORT)"
|
||
else
|
||
echo "❌ 后端 API: 未运行"
|
||
fi
|
||
|
||
if [ -f /tmp/ygft_web.pid ] && kill -0 $(cat /tmp/ygft_web.pid) 2>/dev/null; then
|
||
echo "✅ Web 服务: 运行中 (PID: $(cat /tmp/ygft_web.pid), 端口: $WEB_PORT)"
|
||
else
|
||
echo "❌ Web 服务: 未运行"
|
||
fi
|
||
|
||
echo ""
|
||
echo "🌐 访问地址:"
|
||
echo " - 后端 API: http://localhost:$API_PORT"
|
||
echo " - Web 页面: http://localhost:$WEB_PORT/pages/main.html"
|
||
}
|
||
|
||
# 主菜单
|
||
case "$1" in
|
||
start)
|
||
start_api
|
||
start_web
|
||
echo ""
|
||
echo "===================================="
|
||
echo "所有服务已启动!"
|
||
echo "===================================="
|
||
status
|
||
;;
|
||
stop)
|
||
stop_all
|
||
echo "✅ 所有服务已停止"
|
||
;;
|
||
restart)
|
||
stop_all
|
||
sleep 1
|
||
start_api
|
||
start_web
|
||
echo ""
|
||
echo "===================================="
|
||
echo "所有服务已重启!"
|
||
echo "===================================="
|
||
status
|
||
;;
|
||
status)
|
||
status
|
||
;;
|
||
*)
|
||
echo "用法: $0 {start|stop|restart|status}"
|
||
echo ""
|
||
echo "命令:"
|
||
echo " start - 启动所有服务"
|
||
echo " stop - 停止所有服务"
|
||
echo " restart - 重启所有服务"
|
||
echo " status - 查看服务状态"
|
||
exit 1
|
||
;;
|
||
esac
|