Ubuntu 定时同步数据的实用方案
一、方案总览与选型
二、快速上手 rsync + SSH + cron
#!/usr/bin/env bash
LOG="/var/log/sync_data.log"
echo "$(date '+%F %T'): START" >> "$LOG"
rsync -avz --delete \
-e "ssh -i /home/user/.ssh/id_rsa -p 30110" \
/data/src/ user@dest_ip:/data/dst/ >> "$LOG" 2>&1
echo "$(date '+%F %T'): END (exit=$?)" >> "$LOG"
*/5 * * * * root /usr/local/bin/sync_data.sh
*/5 * * * * /usr/bin/rsync -avz --delete -e "ssh -i /home/user/.ssh/id_rsa -p 30110" /data/src/ user@dest_ip:/data/dst/
三、进阶 实时触发同步 inotify + rsync
#!/usr/bin/env bash
SRC="/data/src"
DST="user@dest_ip:/data/dst"
SSH_OPTS="-i /home/user/.ssh/id_rsa -p 30110"
LOG="/var/log/sync_inotify.log"
inotifywait -m -r -q --timefmt '%F %T' --format '%T %w%f %e' \
-e create,delete,moved_to,close_write,attrib "$SRC" | while IFS=' ' read -r ts file event; do
echo "[$ts] $event on $file, sync..." >> "$LOG"
rsync -avz --delete -e "ssh $SSH_OPTS" "$SRC/" "$DST/" >> "$LOG" 2>&1
done
四、常见场景与命令模板
五、排错与最佳实践