Linux Shell 自动备份脚本实现

7次阅读

自动备份需用tar打包、gzip压缩、date加时间戳、rsync同步远程,并通过cron定时执行;关键在路径权限正确、错误可查、日志完备、定期验证恢复。

Linux Shell 自动备份脚本实现

用 Shell 脚本实现自动备份,核心是组合 tar 打包、gzip 压缩、date 生成时间戳、cp / rsync 复制到备份目录,并通过 cron 定时触发。关键在于路径正确、权限足够、错误可查。

基础备份脚本(本地归档)

以下脚本能打包指定目录,按日期命名,保留最近 7 天备份:

#!/bin/bash # backup.sh SOURCE_DIR="/var/www/html" BACKUP_DIR="/backup" DATE=$(date +%Y%m%d_%H%M) ARCHIVE_NAME="backup_${DATE}.tar.gz" <h1>创建备份目录(如不存在)</h1><p>mkdir -p "$BACKUP_DIR"</p><h1>打包压缩,排除临时文件</h1><p>tar -czf "$BACKUP_DIR/$ARCHIVE_NAME"  -C "$(dirname "$SOURCE_DIR")"  "$(basename "$SOURCE_DIR")"  --exclude='<em>.log'  --exclude='cache/</em>'</p><h1>删除 7 天前的备份</h1><p>find "$BACKUP<em>DIR" -name "backup</em>*.tar.gz" -mtime +7 -delete</p><h1>记录日志</h1><p>echo "[$(date)] Backup completed: $ARCHIVE_NAME" >> "$BACKUP_DIR/backup.log"</p><div class="aritcle_card flexRow">                                                         <div class="artcardd flexRow">                                                                 <a class="aritcle_card_img" href="/ai/1108" title="Sora"><img                                                                                 src="https://img.php.cn/upload/ai_manual/001/246/273/68b6d9768f95f970.png" alt="Sora"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>                                                                 <div class="aritcle_card_info flexColumn">                                                                         <a href="/ai/1108" title="Sora">Sora</a>                                                                         <p>Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。</p>                                                                 </div>                                                                 <a href="/ai/1108" title="Sora" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>                                                         </div>                                                 </div>

保存为 /root/scripts/backup.sh,赋予执行权限:
chmod +x /root/scripts/backup.sh

增强版:远程同步 + 错误检查

加一层 rsync 推送至远程服务器,失败时发邮件提醒(需已配置 mail 命令):

  • 在脚本末尾添加 rsync 命令,使用免密 ssh
  • rsync -az --delete "$BACKUP_DIR/" user@192.168.1.100:/backup/remote/ || echo "RSYNC FAILED at $(date)" | mail -s "Backup alert" admin@example.com
  • set -e 开头让任意命令失败即退出,避免后续误执行
  • if [ $? -ne 0 ]; then ... fi 检查 tar 是否成功,失败则退出并记录

加入定时任务(cron)

每天凌晨 2:30 执行备份:

  • 运行 crontab -e
  • 添加一行:30 2 * * * /root/scripts/backup.sh >/dev/NULL 2>&1
  • 日志重定向到文件更利于排查(如 >/var/log/backup.log 2>&1
  • 确保 cron 使用的 SHELL 环境变量与手动执行一致(可在 crontab 开头加 SHELL=/bin/bash

验证与维护要点

自动备份不是设完就高枕无忧,需定期确认:

  • 手动运行脚本一次,检查输出、归档文件是否生成、大小是否合理
  • tar -tzf backup_*.tar.gz | head -n 5 快速查看压缩包内容
  • 检查磁盘空间:df -h /backup,防止备份填满分区
  • 测试恢复流程:解压一个备份到临时目录,比对关键文件

text=ZqhQzanResources