#!/bin/bash # 设置远程服务器信息 REMOTE_USER="root" REMOTE_HOST="8.134.185.53" REMOTE_PORT="30001" REMOTE_PATH="/root/rain/weather-station/dataTransfer/data/" LOCAL_PATH="/home/imdroid/Build_WRF/cycling_data" # 使用当前目录 LOG_FILE="${LOCAL_PATH}/sync.log" # 确保本地目录存在 mkdir -p "$LOCAL_PATH" # 记录开始时间 echo "=== 开始同步: $(date) ===" >> "$LOG_FILE" # 使用rsync进行增量同步 # -a: 归档模式,保持所有文件属性 # -v: 详细输出 # -z: 传输时压缩数据 # -t: 保持时间戳 # -P: 显示进度并允许断点续传 # -e: 指定ssh命令和端口 # --delete: 删除目标目录中源目录没有的文件 # --timeout=60: 设置超时时间 # --bwlimit=1000: 限制带宽(KB/s) rsync -avzt \ -P \ -e "ssh -p ${REMOTE_PORT}" \ --delete \ --timeout=60 \ --bwlimit=1000 \ --include="*.csv" \ --include="*.gz" \ --exclude="*" \ --log-file="$LOG_FILE" \ "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}" \ "${LOCAL_PATH}/" # 检查rsync退出状态 if [ $? -eq 0 ]; then echo "同步成功完成" >> "$LOG_FILE" # 检查是否有新文件同步 NEW_FILES=$(find "${LOCAL_PATH}" -type f -mmin -10 \( -name "*.csv" -o -name "*.gz" \)) if [ ! -z "$NEW_FILES" ]; then echo "新同步的文件:" >> "$LOG_FILE" echo "$NEW_FILES" >> "$LOG_FILE" fi else echo "同步失败,错误代码: $?" >> "$LOG_FILE" # 可以在这里添加告警通知(如发送邮件) fi # 记录同步时间 echo "=== 结束同步: $(date) ===" >> "$LOG_FILE" echo "" >> "$LOG_FILE" # 保持日志文件大小合理(保留最后1000行) tail -n 1000 "$LOG_FILE" > "${LOG_FILE}.tmp" && mv "${LOG_FILE}.tmp" "$LOG_FILE"