linux系统备份与恢复通过crontab自动化实现,核心是“脚本可靠+定时精准+日志可查”,需用绝对路径编写带时间戳的tar备份脚本、显式声明path、定期清理旧备份并备份crontab自身以防误删。

Linux 系统备份与恢复通过 Crontab 实现自动化,核心在于“脚本可靠 + 定时精准 + 日志可查”。手动备份容易遗漏或出错,而 Crontab 结合 Shell 脚本,能把备份变成无声运行的日常习惯——只要路径、权限、环境变量写对,它就能按时打包、压缩、存档、清理。
写一个带时间戳的备份脚本
脚本是自动化的起点,必须能独立运行成功。推荐用 tar 打包关键目录(如 /etc、/home),并用 date 生成唯一文件名:
- 创建脚本:
nano /usr/local/bin/backup-system.sh - 内容示例:
#!/bin/bash BACKUP_DIR="/backup" DATE=$(date +\%Y\%m\%d_\%H\%M) tar -czf "$BACKUP_DIR/system_$DATE.tar.gz" /etc /home/user/.bashrc /var/spool/cron
- 赋予执行权:
chmod +x /usr/local/bin/backup-system.sh - 手动运行一次:
/usr/local/bin/backup-system.sh,确认生成文件且无报错
用 Crontab 设置定时执行
Crontab 不会继承你的终端环境,所以必须用绝对路径调用脚本,并显式声明必要变量:
- 编辑当前用户任务:
crontab -e - 添加一行(例如每天凌晨2:15执行):
15 2 * * * /usr/local/bin/backup-system.sh - 若脚本中调用了
mysqldump或rsync,务必在脚本开头加 PATH 声明:PATH=/usr/local/bin:/usr/bin:/bin<br>export PATH
- 避免使用
~或相对路径,全部用/backup这类绝对路径
自动保留与清理旧备份
备份越积越多会占满磁盘,建议在脚本末尾加入清理逻辑,或单独设一条定时任务:
- 脚本内追加(保留最近7天):
find /backup -name "system_*.tar.gz" -mtime +7 -delete - 或另设 Crontab 条目(每周日凌晨清理):
0 0 * * 0 find /backup -name "system_*.tar.gz" -mtime +7 -delete - 注意:先用
find /backup -name "system_*.tar.gz" -mtime +7预览将删哪些文件,确认无误再加-delete
备份 Crontab 本身,防误删
Crontab 是定时系统的“大脑”,一旦被 crontab -r 清空就全丢了。必须定期备份它自己:
- 手动备份当前用户的任务:
crontab -l > ~/crontab-backup-$(date +\%F).txt - 自动备份(加到 root 的 Crontab 中):
0 3 * * * crontab -l > /backup/crontab_root_$(date +\%Y\%m\%d).txt - 恢复方法很简单:
crontab /backup/crontab_root_20260615.txt - 提示:如果误删了任务,还可从系统日志
/var/log/cron中提取历史命令(需 grep + awk 过滤)
不复杂但容易忽略——脚本跑通了不代表 Crontab 能跑通,多一次手动验证,少一次深夜救火。











