类别: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.log

2. 设置脚本权限

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} -delete

1. 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  # ✅ 正确

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章