#!/bin/bash # AI-Core gRPC Server Startup Script echo "Starting AI-Core Document Parser gRPC Server..." # 配置 PORT=${1:-50051} # 使用虚拟环境 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" # Windows 下使用 PowerShell 的 py 命令或者直接用 venv if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" || -f "venv/Scripts/python.exe" ]]; then if [ -f "venv/Scripts/python.exe" ]; then echo "Using virtual environment Python..." PYTHON_CMD="$SCRIPT_DIR/venv/Scripts/python.exe" elif command -v py &> /dev/null; then echo "Using py launcher..." PYTHON_CMD="py" else echo "Error: Python not found" exit 1 fi else # Linux/Mac if [ -d "venv" ]; then echo "Activating virtual environment..." source venv/bin/activate PYTHON_CMD="python" else PYTHON_CMD="python3" fi fi echo "Using Python: $PYTHON_CMD" $PYTHON_CMD --version # Check if requirements are installed $PYTHON_CMD -c "import grpcio" 2>/dev/null if [ $? -ne 0 ]; then echo "Installing Python dependencies..." $PYTHON_CMD -m pip install -r requirements.txt if [ $? -ne 0 ]; then echo "Error: Failed to install dependencies" exit 1 fi fi # Generate gRPC code if needed if [ ! -f "proto/document_parser_pb2.py" ]; then echo "Generating gRPC code..." $PYTHON_CMD generate_grpc.py if [ $? -ne 0 ]; then echo "Error: Failed to generate gRPC code" exit 1 fi fi # 检查端口占用并释放 echo "Checking port $PORT..." if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then # Windows NETSTAT_OUTPUT=$(netstat -ano 2>/dev/null | grep ":$PORT" | grep LISTENING) if [ -n "$NETSTAT_OUTPUT" ]; then echo "Port $PORT is in use, killing process..." PID=$(echo "$NETSTAT_OUTPUT" | awk '{print $NF}' | head -1) if [ -n "$PID" ]; then taskkill //F //PID $PID 2>/dev/null sleep 1 fi fi else # Linux/Mac PID=$(lsof -ti:$PORT 2>/dev/null) if [ -n "$PID" ]; then echo "Port $PORT is in use, killing process $PID..." kill $PID 2>/dev/null sleep 1 fi fi # Start the server echo "Starting server on port $PORT..." $PYTHON_CMD main.py --port $PORT --max-workers 10 --log-level INFO