sync_wind_data_30days.sh 1.8 KB

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