linux目录定时打包备份需三步:编写含时间戳、绝对路径和排除规则的脚本;用crontab定时执行并注意环境变量与权限;自动清理旧备份并验证归档可读性与完整性。

Linux 目录定时打包备份,核心是三步:写好打包脚本 → 设置自动执行 → 验证与清理。关键不在命令多复杂,而在路径、时间戳、权限和保留策略是否稳妥。
一、编写可靠的备份脚本
脚本要能独立运行,不依赖当前路径,且避免覆盖旧备份。推荐用 tar + 时间戳 + 绝对路径:
- 用
$(date +%Y%m%d_%H%M)生成唯一文件名,比如backup_20240520_1430.tar.gz - 源目录务必写绝对路径(如
/var/www/html),别用~/或相对路径 - 加上
-C参数指定打包时的根目录,让解压路径干净(例如tar -C /var/www -czf backup.tar.gz html) - 加
--exclude跳过临时文件或日志(如--exclude='*.log' --exclude='cache/') - 最后检查 tar 是否成功:
if [ $? -eq 0 ]; then echo "Backup OK"; else echo "Backup failed"; fi
二、用 crontab 实现定时执行
crontab 是最轻量、最可控的定时方案。注意三点:环境变量、执行用户、日志记录:
- 编辑 root 的定时任务更稳妥(
sudo crontab -e),避免权限不足导致备份失败 - 在脚本开头显式声明 PATH(如
PATH=/usr/local/bin:/usr/bin:/bin),防止 cron 找不到 tar、date 等命令 - 示例:每天凌晨 2:15 备份,保存最近 7 天
15 2 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1 - 建议把备份目标目录设为独立磁盘或挂载点(如
/backup),避免占满系统盘
三、自动清理旧备份文件
不清理会撑爆磁盘。直接在脚本末尾加一句 find 命令即可:
- 保留最近 7 天的 .tar.gz 文件:
find /backup -name "*.tar.gz" -mtime +7 -delete - 更安全的做法是先列出再删:
find /backup -name "*.tar.gz" -mtime +7 -print,确认无误后再加-delete - 如果备份文件命名含时间戳(如
backup_20240510_*.tar.gz),也可用ls -t | tail -n +8 | xargs rm -f按时间排序删除
四、验证备份有效性(别跳过这步)
备份完成≠能恢复。每次备份后应快速校验:
- 用
tar -tzf backup_20240520_1430.tar.gz | head -n 5查看前几行内容,确认归档可读 - 抽样解压一个子目录到临时位置:
mkdir /tmp/test-restore && tar -C /tmp/test-restore -xzf backup.tar.gz - 记录每次备份的大小和文件数,异常波动可能意味着漏打包或出错(可在脚本里加
du -sh和tar -tzf | wc -l)
不复杂但容易忽略:脚本开头加 #!/bin/bash,给执行权限(chmod +x backup.sh),首次手动运行一次再扔进 cron。备份这事,跑通一次只是开始,稳住三个月才算落地。











