sync_build.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/bin/bash
  2. # 同步代码到远端设备并编译
  3. # 用法: ./sync_build.sh # 同步所有设备
  4. # ./sync_build.sh 231 # 只同步 rk3576
  5. # ./sync_build.sh 232 # 只同步 rk3568
  6. set -o pipefail
  7. ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
  8. USER="root"
  9. PASS="123456"
  10. REMOTE_DIR="/root/zone_alarm"
  11. # 设备列表: 别名 IP
  12. DEVICES=(
  13. "rk3576 192.168.1.231 yolov5s_rk3576_int8.rknn"
  14. "rk3568 192.168.1.232 yolov5s_rk3568_int8.rknn"
  15. )
  16. # 过滤参数指定的设备
  17. if [ -n "$1" ]; then
  18. FILTERED=()
  19. for dev in "${DEVICES[@]}"; do
  20. name=$(echo "$dev" | awk '{print $1}')
  21. ip=$(echo "$dev" | awk '{print $2}')
  22. if [[ "$1" == "$name" || "$ip" == *"$1"* ]]; then
  23. FILTERED+=("$dev")
  24. fi
  25. done
  26. DEVICES=("${FILTERED[@]}")
  27. fi
  28. sync_and_build() {
  29. local name="$1"
  30. local ip="$2"
  31. local model="$3"
  32. echo "=========================================="
  33. echo "[${name}] ${ip} 同步中..."
  34. echo "=========================================="
  35. # 排除本地编译产物和依赖,远端自行生成
  36. sshpass -p "$PASS" rsync -az --delete \
  37. --exclude 'build/' \
  38. --exclude '.deps/' \
  39. --exclude '.git/' \
  40. "$ROOT_DIR/" "${USER}@${ip}:${REMOTE_DIR}/"
  41. if [ $? -ne 0 ]; then
  42. echo "[${name}] [ERROR] 同步失败"
  43. return 1
  44. fi
  45. echo "[${name}] [OK] 同步完成"
  46. # 自动修改 model_path
  47. sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no "${USER}@${ip}" \
  48. "sed -i 's|\"model_path\": \"[^\"]*\"|\"model_path\": \"models/${model}\"|' ${REMOTE_DIR}/config/config.json"
  49. echo "[${name}] [OK] 模型已设置为 ${model}"
  50. echo "[${name}] 编译中..."
  51. sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no "${USER}@${ip}" \
  52. "cd ${REMOTE_DIR} && bash build.sh 2>&1"
  53. if [ $? -ne 0 ]; then
  54. echo "[${name}] [ERROR] 编译失败"
  55. return 1
  56. fi
  57. echo "[${name}] [OK] 编译成功"
  58. }
  59. RESULT=0
  60. for dev in "${DEVICES[@]}"; do
  61. name=$(echo "$dev" | awk '{print $1}')
  62. ip=$(echo "$dev" | awk '{print $2}')
  63. model=$(echo "$dev" | awk '{print $3}')
  64. sync_and_build "$name" "$ip" "$model" || RESULT=1
  65. done
  66. echo "=========================================="
  67. if [ $RESULT -eq 0 ]; then
  68. echo "[全部完成]"
  69. else
  70. echo "[存在失败项,请检查上方日志]"
  71. fi
  72. exit $RESULT