用tar配合crontab实现每天凌晨自动归档,需编写带时间戳的备份脚本(如myapp_20240405.tar.gz),设置路径、权限与错误处理,再通过crontab定时执行并记录日志。

用 tar 配合 crontab 实现每天凌晨自动归档,核心是写一个归档脚本,再用 crontab 定时触发它。关键在于路径、时间戳、权限和错误处理,否则容易归档失败或覆盖旧文件。
写一个带时间戳的 tar 归档脚本
归档时加时间戳能避免覆盖,也方便按天查找。比如把 /var/log/myapp 打包成 myapp_20240405.tar.gz:
- 新建脚本,例如
/home/user/backup.sh - 内容示例:
#!/bin/bash
# 设置变量(根据实际修改)
SOURCE_DIR="/var/log/myapp"
BACKUP_DIR="/backup"
DATE=$(date +\%Y\%m\%d)
ARCHIVE_NAME="myapp_${DATE}.tar.gz"
<h1>创建备份目录(如果不存在)</h1><p>mkdir -p "$BACKUP_DIR"</p><h1>执行归档(-z 压缩,-f 指定文件名,-C 切换到源目录再打包,避免绝对路径)</h1><p>tar -zcf "$BACKUP_DIR/$ARCHIVE_NAME" -C "$SOURCE_DIR" .</p><h1>可选:保留最近7天,清理旧备份</h1><p>find "$BACKUP<em>DIR" -name "myapp</em>*.tar.gz" -mtime +7 -delete- 给脚本执行权限:
chmod +x /home/user/backup.sh
用 crontab 添加每天凌晨定时任务
编辑当前用户的定时任务:crontab -e,添加一行:
# 每天凌晨2:15执行归档(可调) 15 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
-
15 2 * * *表示每天 2:15 执行(避免整点高峰) -
>> /var/log/backup.log 2>&1把输出和错误都记录下来,便于排查问题 - 确保 cron 服务已运行:
systemctl status cron(Ubuntu/Debian)或systemctl status crond(CentOS/RHEL)
注意路径和权限问题
crontab 默认使用最小环境变量,$PATH 很短,tar 可能找不到:
- 脚本中用绝对路径调用命令,如
/bin/tar或/usr/bin/find - 确认脚本里所有路径(源目录、备份目录)对运行用户可读/可写
- 如果要备份系统目录(如
/var/log),cron 最好用 root 用户添加:sudo crontab -e
验证和调试小技巧
别等凌晨才发现失败:
- 先手动运行脚本:
/home/user/backup.sh,看是否生成文件、有无报错 - 临时改 cron 时间(比如
* * * * *每分钟跑一次),测试几分钟后检查日志和备份文件 - 查看 cron 日志:
sudo grep CRON /var/log/syslog(Ubuntu)或sudo journalctl -u cron | tail -20

















