一、为什么要按主机 IP 分类备份¶
在多台服务器场景下,如果所有机器都把备份直接堆在同一个目录里,后期管理会比较混乱。按主机 IP 建目录,可以更方便地:
- 区分不同机器的备份来源
- 做统一备份汇总
- 后续扩展到集中拉取、归档或清理
二、这个案例要完成什么¶
原始笔记的目标是:
- 取出当前主机 IP
- 取出当前时间
- 创建以 IP 命名的目录
- 把
/etc/打包到该目录下 - 文件名里带上日期,方便区分不同批次
三、备份脚本示例¶
#!/bin/bash
# author: zq
# desc: 备份脚本
# version: v1.0
# 变量
ip=`hostname -I | awk '{print $1}'`
time=`date +%F_%w`
# 操作
mkdir -p /backup/$ip
tar zcf /backup/$ip/etc-$time.tar.gz /etc/
四、脚本关键点拆解¶
4.1 获取当前主机 IP¶
ip=`hostname -I | awk '{print $1}'`
这里取第一块网卡的第一个 IP,用于命名备份目录。
4.2 获取时间戳¶
time=`date +%F_%w`
这样生成的时间格式通常类似:
2020-02-12_3
便于区分每天生成的备份文件。
4.3 创建目录并打包¶
mkdir -p /backup/$ip
tar zcf /backup/$ip/etc-$time.tar.gz /etc/
这种写法能够确保:
- 目录不存在时自动创建
- 多次执行不会因为目录已存在而失败
- 备份文件按主机维度自然归类
五、加入定时任务¶
把脚本保存到固定位置后,例如:
/scripts/backup-etc.sh
再写入 crontab:
$ crontab -e
00 01 * * * /bin/sh /scripts/backup-etc.sh >/dev/null 2>&1
这表示每天凌晨 1 点执行一次,并把输出丢弃,避免 cron 产生额外邮件或垃圾输出。
六、这个模板还能怎么扩展¶
这个案例虽然简单,但非常适合作为模板继续增强,例如:
- 增加日志输出
- 增加备份保留天数清理
- 增加 rsync 或 scp 同步到备份服务器
- 把
/etc/替换成业务目录,如/data、/var/log等
七、小结¶
一个稳定的定时备份脚本,核心通常就三步:
1、用变量把“主机信息”和“时间信息”提出来 2、用固定目录结构管理备份结果 3、让 crontab 只负责按时调用脚本
按这个方式组织后,脚本结构清晰,也方便以后继续扩展成更完整的备份体系。