Files
smart-inspection/scripts/restart_flask.sh
T
FaulknerWu 1429442dbd Rename customs-tablet-frontend to public-frontend and add new features
- Rename customs-tablet-frontend/ to public-frontend/ for broader scope
- Add new pages: customs, inspection with camera integration
- Add new services: apiClient.ts, backendApi.ts, normalizers.ts
- Add CameraFrame component for real-time video streaming
- Add scan_fixer module with clock_publisher and timestamp fix utilities
- Update startup scripts to support new frontend structure
- Update arm_server configuration and service files

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:18:20 +08:00

76 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# ============================================================
# restart_flask.sh - 语法检查 + 重启 Flask + 验证
# 用法: ssh elephant@<AGV_IP> '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 "=========================================="