Linux定期备份目录小脚本

0
7

### 一、Linux备份目录的小脚本

  • 备份压缩不包含路径
  • 保留最后的5次备份
  • 脚本backup_docker.sh
#!/bin/bash

# 设置源目录和目标目录(建议不使用中文路径,避免兼容性问题)
SOURCE_DIR="/root/docker"
DEST_DIR="/root/esxi_backup"  # 改为无中文,建议使用英文路径

# 获取当前时间戳
DATE=$(date +%Y%m%d%H%M)

# 判断源目录是否存在
if [ ! -d "$SOURCE_DIR" ]; then
  echo "错误:源目录 $SOURCE_DIR 不存在!" >&2
  exit 1
fi

# 创建目标目录(如果不存在)
mkdir -p "$DEST_DIR"

# 压缩源目录内容(不保留上层路径)
BACKUP_FILE="${DEST_DIR}/backup_${DATE}.tar.gz"
tar -czf "$BACKUP_FILE" -C "$SOURCE_DIR" .

# 切换到备份目录,清理旧备份
cd "$DEST_DIR" || exit 1
BACKUPS=($(ls -t backup_*.tar.gz))  # 最新的排在最前

# 如果备份数量超过5,删除最旧的多余备份
while [ ${#BACKUPS[@]} -gt 5 ]; do
  LAST_INDEX=$((${#BACKUPS[@]} - 1))
  OLD_BACKUP="${BACKUPS[$LAST_INDEX]}"
  echo "删除旧备份:$OLD_BACKUP"
  rm -f "$OLD_BACKUP"
  unset BACKUPS[$LAST_INDEX]
done

echo "✅ 备份完成:$BACKUP_FILE"

二、设置定时任务

  • 本在每周三 9 点自动执行
(crontab -l; echo "0 9 * * 3 /root/backup_docker.sh >> /var/log/backup_cron.log 2>&1") | crontab -

三、其他

🔧 crontab 命令格式:

* * * * * command

格式从左到右依次是:

字段序号含义范围
第1位分钟(min)0–59
第2位小时(hour)0–23
第3位日(day)1–31
第4位月(month)1–12
第5位星期(week)0–7(0 和 7 都代表星期日)
第6位要执行的命令(command)

✅ 常用符号说明:

符号含义
*任意值(每分钟、每天等)
,列表(如1,3,5 表示星期一、三、五)
-范围(如1-5 表示星期一到星期五)
/步长(如*/5 表示每5分钟)

发布回复

请输入评论!
请输入你的名字