可靠备份需可执行脚本+规范crontab:脚本含PATH声明、时间戳命名、tar压缩、7天自动清理;crontab用绝对路径+日志重定向,手动验证后再部署。

用 Crontab 定时做目录全量备份,关键不是“加个时间就完事”,而是让每次备份都可靠、可追溯、不堆积垃圾。核心是:一个可独立运行的脚本 + 一条带日志和路径保障的 crontab 条目。
写一个带时间戳的全量备份脚本
全量备份意味着每次生成一份完整副本,适合数据量不大、变更不频繁的目录(如配置文件、静态网站根目录)。脚本要完成三件事:建带日期的备份目录、打包源目录、清理旧备份。
- 用 tar -czf 打包压缩,避免单个大文件误删或损坏影响全部
- 文件名必须含 $(date +\%Y\%m\%d_\%H\%M) 这类时间戳,禁止用固定名(否则后一次会覆盖前一次)
- 加上 find ... -mtime +7 -delete 自动清理 7 天前的备份,防止磁盘占满
- 脚本开头显式声明 PATH,例如 PATH=/usr/local/bin:/usr/bin:/bin,避免 crontab 环境下 tar、date 命令找不到
确保脚本能手动跑通再交给 Crontab
别跳过这步。Crontab 失败 90% 是因为脚本在它环境下根本执行不了。
- 给脚本加执行权限:chmod +x /path/to/backup.sh
- 切换到目标用户(如 www-data 或 backup),直接运行:/path/to/backup.sh
- 检查输出目录是否生成了 xxx_20260609_0945.tar.gz 这样的文件
- 确认压缩包能正常解压:tar -tzf xxx_20260609_0945.tar.gz | head -5
用 crontab -e 添加定时任务
不要用系统级 /etc/crontab,除非你明确需要 root 权限操作。普通用户备份用个人 crontab 更安全、更清晰。
- 运行 crontab -e,添加一行(例如每天凌晨 2:15 执行):
15 2 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1 - 所有路径必须写绝对路径(/home/user/backup.sh,不能是 ~/backup.sh)
- 末尾重定向 >> /var/log/backup.log 2>&1 很重要——把成功提示和报错都记下来,出问题时直接查日志,不用猜
- 保存后用 crontab -l 确认已生效
验证与维护要点
设完不等于万事大吉。定期看看日志和磁盘空间,才是真落地。
- 每天早上快速扫一眼 tail -n 5 /var/log/backup.log,看最后几行有没有 “Backup Successful” 或 “No such file” 这类关键词
- 每月用 ls -lt /backup/ | head -10 检查备份文件是否按预期生成,时间是否连续
- 如果备份目标是远程 NAS 或另一台服务器,脚本里要用 rsync -avz --delete 替代 tar,并提前配好 SSH 免密登录
- 备份源目录若含软链接,加 -h 参数(tar -chzf);若需保留权限和属主,加 -p(tar -czpf)

















