Linux中用crontab定期压缩需封装脚本而非直接写tar命令,创建带时间戳、错误检查和日志的backup.sh,设绝对路径与权限,再通过crontab定时调用并验证执行。

在 Linux 中用 crontab 实现定期压缩,核心是把压缩逻辑封装进脚本,再让 crontab 按时调用。不建议直接在 crontab 里写长 tar 命令,容易出错、难维护、无日志反馈。
写一个带时间戳和错误检查的备份脚本
创建 /opt/scripts/backup.sh(路径可自定),内容如下:
#!/bin/bash
SOURCE="/var/www/html"
DEST="/backup"
LOG="/var/log/backup.log"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$DEST/site_backup_$TIMESTAMP.tar.gz"
[ ! -d "$SOURCE" ] && { echo "[$(date)] ERROR: $SOURCE not found" >> "$LOG"; exit 1; }
[ ! -d "$DEST" ] && mkdir -p "$DEST"
echo "[$(date)] START compressing $SOURCE" >> "$LOG"
tar -czf "$BACKUP_FILE" -C "$(dirname "$SOURCE")" "$(basename "$SOURCE")" 2>> "$LOG"
if [ $? -eq 0 ]; then
echo "[$(date)] SUCCESS: $BACKUP_FILE created" >> "$LOG"
else
echo "[$(date)] FAILED: tar command exited with error" >> "$LOG"
fi
给脚本加权限并手动测试
执行以下命令确保脚本能运行:
- chmod +x /opt/scripts/backup.sh
- sudo /opt/scripts/backup.sh —— 观察是否生成文件、日志是否有 SUCCESS 记录
- 检查生成的 .tar.gz 文件能否正常解压:tar -tzf /backup/site_backup_*.tar.gz | head -5
用 crontab 添加定时任务
运行 crontab -e,添加一行(例如每天凌晨 3:15 执行):
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
15 3 * * * /opt/scripts/backup.sh
注意要点:
- 务必使用绝对路径:crontab 默认 PATH 很窄(通常只有 /usr/bin:/bin),/bin/bash、/usr/bin/tar 等都建议显式写出或在脚本开头指定 SHELL 和 PATH
- 如果脚本依赖环境变量(如 Python 虚拟环境),需在脚本内 source 或显式设置
- 避免用 ~ 或 $HOME,crontab 不展开这些变量
验证与排错
任务配置后别急着等明天,立刻验证是否生效:
- crontab -l —— 确认任务已保存
- sudo systemctl status cron(Debian/Ubuntu)或 sudo systemctl status crond(RHEL/CentOS)—— 确保服务正在运行
- 查看系统级日志:sudo grep CRON /var/log/syslog(Ubuntu)或 sudo tail -f /var/log/cron(CentOS)—— 看有没有执行记录和报错
- 临时改个测试时间(比如 */2 * * * * 表示每两分钟跑一次),确认脚本能反复触发且不堆积

















