61 lines
1.7 KiB
Bash
61 lines
1.7 KiB
Bash
#!/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"
|