linux定时备份核心是脚本写稳、定时配准、日志留痕:脚本用绝对路径、自动建目录、时间戳命名、内置清理与tar校验;crontab需显式声明path/home、避免sudo误用、合理加随机延迟;必须重定向日志并手动验证备份完整性。

用 Crontab 实现 Linux 定时备份,关键不是堆功能,而是让每次执行都可预期、可验证、可追溯。核心就三件事:脚本写稳、定时配准、日志留痕。
备份脚本要独立可靠
脚本不能依赖你的交互式 shell 环境,必须自带路径、自建目录、自动清理:
- 所有命令用绝对路径,比如 /bin/tar、/usr/bin/find,避免 crond 找不到命令
- 目标目录用 mkdir -p /backup 创建,不假设它已存在
- 文件名带精确时间戳:date +%Y%m%d_%H%M(分钟级),防止同秒多次触发覆盖
- 旧文件清理写在脚本里:find /backup -name "*.tar.gz" -mtime +7 -delete,比靠人工更省心
- 加 tar 校验步骤:tar -tzf "$BACKUP_FILE" > /dev/null || { echo "损坏"; exit 1; },坏包不入库
Crontab 配置要显式可控
crontab 不读你 .bashrc 里的 PATH,也不继承 HOME,必须手动补全:
- 编辑当前用户任务:crontab -e,别用 sudo crontab -e(除非真要 root 权限)
- 每行开头声明环境:PATH=/usr/local/bin:/usr/bin:/bin HOME=/home/youruser
- 时间格式严格按「分 时 日 月 周」,例如 0 2 * * * /home/user/backup.sh 表示每天 2:00 执行
- 远程或集群场景可加随机延迟:0 2 * * * /bin/bash -c 'sleep $((RANDOM % 300)); /home/user/backup.sh',防 I/O 冲突
日志和验证缺一不可
没日志的备份等于没备份——失败无声,出事才知没跑成:
- 重定向到日志文件:0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
- 脚本内部也记关键节点:echo "$(date): start backup" >> /var/log/backup.log
- 手动验证一次:/home/user/backup.sh 直接运行,检查 tar 包能否解压、内容是否完整
- 定期看日志尾部:tail -n 15 /var/log/backup.log,比等报警更快发现问题
进阶建议:按需选方式
不是所有场景都适合 tar 全量打包:
- 大目录频繁变更?改用 rsync -a --delete 做增量同步,省空间又快
- 要跨服务器?脚本里加 rsync -avz /src user@host:/dst,配合免密 SSH
- 数据库备份?别直接 tar data 目录,用 /usr/bin/mysqldump 导出 SQL,再压缩
- 备份存哪儿?本地磁盘只是第一跳,后续可 rsync 到 NAS 或用 rclone 推到对象存储











