首页/数据/备份与容灾速查/rsync 备份脚本模板要点

rsync 备份脚本模板要点

可值守的备份脚本需要严格错误处理、日志与退出码区分、失败告警,以及 rsync 特有退出码 24(源文件传输中消失)的处理。

备份与容灾速查数据更新于 2026-10-13

rsync 备份脚本模板是什么

可值守的备份脚本不只是把命令塞进计划任务:它需要严格的错误处理、可追溯的日志、能区分成功与部分失败的退出码判断,以及失败时的告警。rsync 特有的退出码 24 表示有源文件在传输中消失,多数团队按成功处理,其余非零值都应触发告警。

基本信息

脚本骨架严格模式、日志重定向、退出码分支
关键细节区分 rsync 退出码 24 与其他非零值
日志要求带时间戳与主机名,按天分文件并控制保留量
配套机制失败告警、任务超时保护、并发互斥

脚本骨架

脚本骨架
#!/usr/bin/env bash
set -euo pipefail
LOG=/var/log/backup-$(date +%F).log
exec >>"$LOG" 2>&1

echo "[$(date '+%F %T')] backup start on $(hostname)"
rsync -a --delete --exclude-from=/etc/backup-exclude.txt \
      /data/ backup@10.0.0.5:/backup/data/
rc=$?
case $rc in
  0)  echo "OK: $(date)" ;;
  24) echo "WARN: 有源文件在传输中消失,视为成功" ;;
  *)  echo "FAIL rc=$rc" >&2; exit $rc ;;
esac

退出码语义

退出码含义处理建议
0传输成功记录并继续
24源文件在传输中消失按成功处理并在日志中留痕
23部分文件未能传输告警,核对权限与磁盘空间
其他非零参数、网络或目标端错误告警并终止当次任务

脚本必备要素

  • 严格模式:遇到未定义变量或管道失败要立即停止,避免带着错误继续执行
  • 超时与互斥:用锁文件防止同任务并发,用超时命令避免任务无限挂起
  • 日志可追溯:输出带时间戳与主机名,按日切分并设置保留天数
  • 结果校验:任务结束后比对产物大小或条目数,不能只看退出码
  • 告警通道:连续失败、耗时异常或体积骤降都要能被值班人员看到
rsync 退出码 24 表示传输期间源端文件消失,很多团队按成功处理;其余非零值都应触发告警,尤其是部分文件未传输这一类。
脚本内的口令、密钥路径与目标地址属于敏感配置,应放在权限受限的独立配置文件中,而不是写在可被其他用户读取的脚本里。

易错点

  • set -e 与管道、命令替换组合时行为微妙,关键步骤建议显式检查返回值
  • 日志不带时间戳与主机名,多机汇总时无法快速定位来源
  • 没有并发互斥,上一次任务未完成时下一次已启动,两边互相覆盖
  • 只发邮件而不接入值班通道,告警长期无人处理,失败被默认为常态

数据来源与参考

  • rsync 手册(退出码说明)
  • Bash 手册(set -euo pipefail)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌