run_map_update.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/bin/bash
  2. # 检查到未定义的变量则停止执行并报错
  3. set -u
  4. # 检查参数数量
  5. if [ "$#" -ne 2 ]; then
  6. echo "Error: Incorrect number of arguments"
  7. echo "Usage: $0 arg1 arg2"
  8. exit 1
  9. fi
  10. CONTAINER_NAME=$1
  11. DOWNLOAD_FILE_PATH=$2
  12. UPDATE_DATA_PATH="/home/cicv/work/pji_desktop/map_update/data"
  13. CONTAINER_WORKSPACE="/home/cartographer_detailed_comments_ws-master"
  14. SENSITIVE_DIRS=(
  15. "/"
  16. "/bin"
  17. "/boot"
  18. "/dev"
  19. "/etc"
  20. "/home"
  21. "/lib"
  22. "/lib64"
  23. "/opt"
  24. "/proc"
  25. "/root"
  26. "/sbin"
  27. "/sys"
  28. "/tmp"
  29. "/usr"
  30. "/var"
  31. "/home/cicv"
  32. )
  33. is_sensitive_directory() {
  34. local dir="$1"
  35. for sensitive_dir in "${SENSITIVE_DIRS[@]}"; do
  36. if [[ "$dir" == "$sensitive_dir" ]]; then
  37. return 0 # 敏感目录
  38. fi
  39. done
  40. return 1 # 非敏感目录
  41. }
  42. # 清除历史文件
  43. # 检查要删除的目录是否为空
  44. if [[ -z "$UPDATE_DATA_PATH" ]]; then
  45. echo "Error: Variable UPDATE_DATA_PATH is not set or empty"
  46. exit 1
  47. fi
  48. # 检查要删除的目录是否为敏感目录
  49. if is_sensitive_directory "$UPDATE_DATA_PATH"; then
  50. echo "Error: '$UPDATE_DATA_PATH' is a sensitive directory and can not be deleted!"
  51. exit 1
  52. fi
  53. # 删除对应目录
  54. sudo rm -rf "$UPDATE_DATA_PATH"
  55. # 解压地图更新对应的压缩包
  56. unzip "$DOWNLOAD_FILE_PATH" -d "$UPDATE_DATA_PATH"
  57. # 检查容器启动状态
  58. if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then
  59. echo "Container $CONTAINER_NAME is already running."
  60. else
  61. echo "Starting container $CONTAINER_NAME..."
  62. docker start "$CONTAINER_NAME"
  63. fi
  64. # 容器内执行地图更新脚本
  65. docker exec "$CONTAINER_NAME" /bin/bash -c "source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json"