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 表示传输期间源端文件消失,很多团队按成功处理;其余非零值都应触发告警,尤其是部分文件未传输这一类。
脚本内的口令、密钥路径与目标地址属于敏感配置,应放在权限受限的独立配置文件中,而不是写在可被其他用户读取的脚本里。