一、为什么要按主机 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 只负责按时调用脚本

按这个方式组织后,脚本结构清晰,也方便以后继续扩展成更完整的备份体系。