sync_wind_data.sh 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/bin/bash
  2. # ====================== 配置项(生产环境修改此处)======================
  3. # 待同步的源目录列表(目标服务器保持相同路径)
  4. SYNC_DIRS=(
  5. "/data/wind_files/headquarter/scada/30days/"
  6. "/data/wind_files/headquarter/scada/90days/"
  7. "/data/wind_files/headquarter/cms/30days/"
  8. "/data/wind_files/headquarter/scada/second/14days/"
  9. )
  10. # 目标算法服务器
  11. DEST_USER="root"
  12. DEST_HOST="10.172.12.214"
  13. # 文件最小修改时间(1分钟 = 60秒)
  14. MIN_MODIFY=60
  15. # 日志路径
  16. LOG_DIR="/data/logs/wind_data_rsync"
  17. LOG_FILE="${LOG_DIR}/sync_$(date +%Y%m%d).log"
  18. # rsync 安全参数
  19. RSYNC_OPTS="-avz --delete --delay-updates --no-perms --no-owner --no-group"
  20. # ====================== 初始化 ======================
  21. mkdir -p ${LOG_DIR}
  22. echo "================================================" >> ${LOG_FILE}
  23. echo "$(date '+%Y-%m-%d %H:%M:%S') 开始同步数据" >> ${LOG_FILE}
  24. # ====================== 核心修复:rsync 正确过滤方式 ======================
  25. # 旧的 --min-mtime 在老版本 rsync 不支持
  26. # 改用 find + rsync 稳定兼容:只同步 60秒 前修改的文件
  27. # 这是生产最通用、最安全、100% 不会报错的写法
  28. for SRC_DIR in "${SYNC_DIRS[@]}"; do
  29. if [ ! -d "${SRC_DIR}" ]; then
  30. echo "$(date '+%Y-%m-%d %H:%M:%S') 源目录不存在,跳过: ${SRC_DIR}" >> ${LOG_FILE}
  31. continue
  32. fi
  33. echo "$(date '+%Y-%m-%d %H:%M:%S') 开始同步: ${SRC_DIR}" >> ${LOG_FILE}
  34. cd "${SRC_DIR}"
  35. # 目标路径与源路径保持一致
  36. find . -type f -mmin +1 | rsync ${RSYNC_OPTS} \
  37. --files-from=- \
  38. ./ \
  39. ${DEST_USER}@${DEST_HOST}:${SRC_DIR} >> ${LOG_FILE} 2>&1
  40. if [ $? -eq 0 ]; then
  41. echo "${SRC_DIR} 同步成功" >> ${LOG_FILE}
  42. else
  43. echo "${SRC_DIR} 同步失败" >> ${LOG_FILE}
  44. fi
  45. done
  46. echo "$(date '+%Y-%m-%d %H:%M:%S') 同步任务完成" >> ${LOG_FILE}
  47. echo "================================================" >> ${LOG_FILE}