用 rsync + cron 做异地备份

2024-05-09   备份

脚本核心就这几行:

#!/bin/bash
SRC="/docker/data /etc/nginx"
DEST="backup@remote-server:/backups/$(hostname)"
DATE=$(date +%Y%m%d)

for dir in $SRC; do
  rsync -azP --delete \
    --exclude="*.log" \
    --exclude="*.tmp" \
    "$dir" "$DEST/$DATE/"
done

--delete:源端删了的文件目标端也删,保持同步。如果想保留历史快照,改用 --backup --backup-dir。

--exclude:日志和临时文件不用备份,省流量。

cron 里加一条,每天凌晨 3 点跑:

0 3 * * * /root/scripts/backup.sh >> /var/log/backup.log 2>&1

跑了一段时间挺稳的。唯一要注意的是 SSH 密钥要提前配好,cron 环境里没有交互终端,密码验证会直接失败。