#!/bin/bash # ============================================================ # restart_flask.sh - 语法检查 + 重启 Flask + 验证 # 用法: ssh elephant@ 'bash -s' < scripts/restart_flask.sh # 或在 AGV 上: cd ~/work/smart-inspection && ./scripts/restart_flask.sh # ============================================================ set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" AGV_PROJECT_DIR="${AGV_PROJECT_DIR:-$PROJECT_DIR}" AGV_APP_DIR="${AGV_APP_DIR:-$AGV_PROJECT_DIR/agv_app}" AGV_ROS2_DIR="${AGV_ROS2_DIR:-$HOME/agv_pro_ros2}" ROS_DISTRO="${ROS_DISTRO:-humble}" ROS_SETUP="${ROS_SETUP:-/opt/ros/$ROS_DISTRO/setup.bash}" ROS_WORKSPACE_SETUP="${ROS_WORKSPACE_SETUP:-$AGV_ROS2_DIR/install/setup.bash}" LOG_DIR="${LOG_DIR:-/tmp}" FLASK_PORT="${FLASK_PORT:-5000}" FLASK_LOG="$LOG_DIR/agv_flask.log" mkdir -p "$LOG_DIR" source "$ROS_SETUP" 2>/dev/null || true source "$ROS_WORKSPACE_SETUP" 2>/dev/null || true cd "$AGV_APP_DIR" echo "==========================================" echo " 重启 Flask 服务" echo "==========================================" echo "" # 1. 语法检查 echo "[1/3] Python 语法检查..." uv run --locked python -m py_compile app.py if [ $? -ne 0 ]; then echo "❌ 语法错误,请先修复" exit 1 fi echo " ✅ 语法检查通过" # 2. 清缓存 + 重启 echo "[2/3] 清理缓存并重启..." find "$AGV_APP_DIR" -name '*.pyc' -delete 2>/dev/null find "$AGV_APP_DIR" -name '__pycache__' -type d -exec rm -rf {} + 2>/dev/null pkill -f "python.*app.py" 2>/dev/null || true pkill -f "uv run .*python app.py" 2>/dev/null || true sleep 1 nohup uv run --locked python app.py > "$FLASK_LOG" 2>&1 & FLASK_PID=$! echo " Flask PID: $FLASK_PID" # 3. 验证 echo "[3/3] 验证服务..." sleep 3 if ss -tlnp 2>/dev/null | grep -q ":$FLASK_PORT " || netstat -tlnp 2>/dev/null | grep -q ":$FLASK_PORT "; then echo " ✅ 端口 $FLASK_PORT 正常监听" # 测试机械臂摄像头单帧 result=$(curl -s --max-time 5 "http://127.0.0.1:$FLASK_PORT/api/camera/arm_refresh" 2>/dev/null | head -c 4) if [ "$result" = "$(echo -en '\xff\xd8\xff\xe0')" ]; then echo " ✅ arm_refresh 返回 JPEG" else echo " ⚠️ arm_refresh 返回异常(机械臂可能未连接)" fi else echo " ❌ 端口 $FLASK_PORT 未监听,查看日志:" tail -10 "$FLASK_LOG" exit 1 fi echo "" echo "==========================================" echo " ✅ 重启完成" echo "=========================================="