类别:CentOS / 日期:2025-12-21 / 浏览:7 / 评论:0
需求:centos7将/web自动压缩成.gz并备份到/home/web_backup,每周备份一次,并自动删除两个月前的备份,如何配置?
可以通过以下步骤配置CentOS 7的自动备份任务:
1. 创建备份脚本
# 创建脚本文件 sudo vi /usr/local/bin/web_backup.sh
脚本内容:
#!/bin/bash
# 配置变量
SOURCE_DIR="/web"
BACKUP_DIR="/home/web_backup"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="web_backup_${DATE}"
KEEP_DAYS=60 # 保留60天(约两个月)
# 创建备份目录
mkdir -p ${BACKUP_DIR}
# 创建临时目录
TEMP_DIR=$(mktemp -d)
# 复制源文件到临时目录
cp -r ${SOURCE_DIR}/* ${TEMP_DIR}/
# 压缩备份(使用gzip)
cd ${TEMP_DIR}
tar -czf ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz .
# 清理临时目录
rm -rf ${TEMP_DIR}
# 删除60天前的备份文件
find ${BACKUP_DIR} -name "web_backup_*.tar.gz" -mtime +${KEEP_DAYS} -delete
# 记录日志
echo "$(date): Backup completed - ${BACKUP_NAME}.tar.gz" >> /var/log/web_backup.log2. 设置脚本权限
sudo chmod +x /usr/local/bin/web_backup.sh
3. 配置每周自动执行(使用cron)
# 编辑cron任务 sudo crontab -e
添加以下行(每周日凌晨2点执行):
# 每周日凌晨2点执行备份 0 2 * * 0 /usr/local/bin/web_backup.sh
或者使用更灵活的schedule:
# 每周日凌晨2点执行(0=周日) 0 2 * * 0 /usr/local/bin/web_backup.sh # 或者每周一凌晨2点执行(1=周一) 0 2 * * 1 /usr/local/bin/web_backup.sh
4. 验证配置
# 手动测试脚本 sudo sh /usr/local/bin/web_backup.sh # 检查备份文件 ls -lh /home/web_backup/ # 查看日志 tail -f /var/log/web_backup.log
========以下对删除过期文件命令的解释==============
命令解释:
find ${BACKUP_DIR} -name "web_backup_*.tar.gz" -mtime +${KEEP_DAYS} -delete1. find ${BACKUP_DIR}
find:查找文件的命令${BACKUP_DIR}:变量,这里是/home/web_backup,表示搜索的起始目录
2. -name "web_backup_*.tar.gz"
-name:按文件名匹配"web_backup_*.tar.gz":文件名模式
3. -mtime +${KEEP_DAYS}
-mtime:按修改时间筛选(modification time)+${KEEP_DAYS}:+60(因为 KEEP_DAYS=60)+60表示:修改时间在60天前(>60天)+n:n天之前(大于n天)n:正好n天前(24*n小时前)-n:n天之内(小于n天)
4. -delete
删除找到的文件
注意:
-delete必须放在最后,因为它会立即删除匹配的文件
时间计算示例
假设今天是 2024-01-01:
-mtime +60:匹配修改时间在 2023-11-01 之前的文件保留时间线:
2023-11-01 之前 ❌ 删除(>60天) 2023-11-01 之后 ✅ 保留(≤60天)
等效的手动操作
这个命令相当于执行:
# 查找60天前的备份文件find /home/web_backup -name "web_backup_*.tar.gz" -mtime +60# 然后手动删除找到的文件
重要注意事项
1. 时间精度
-mtime基于天(24小时),不是精确到小时文件修改时间计算:当前时间 - 文件mtime > 60*24小时
2. 风险警告
# 危险的写法(顺序很重要)find /path -delete -name "*.bak" # ❌ 错误!会删除所有文件 # 正确的写法find /path -name "*.bak" -delete # ✅ 正确

