答案是:一个可执行的linux服务器自动化备份脚本需用shell实现打包、时间戳命名、gzip压缩、7天前过期备份清理及完整日志记录,配合cron定时触发,且具备源目录检查、set -e容错、绝对路径调用和权限配置等生产级可靠性措施。

Linux 服务器自动化备份,核心是用 Shell 脚本封装备份逻辑,再靠 cron 定时触发——不依赖第三方工具,原生可靠,运维一线普遍采用。
写一个可执行的备份脚本
脚本要完成打包、命名、压缩、清理、记录五件事,每步都需容错:
- 用 tar -czf 打包并 gzip 压缩,比如
tar -czf /backup/web_$(date +%Y%m%d).tar.gz /var/www/html - 文件名必须含时间戳,避免覆盖,推荐格式
backup_20260611.tar.gz或更精细的backup_20260611_1105.tar.gz - 备份前检查源目录是否存在,不存在就退出并记日志,防止静默失败
- 用 find … -mtime +7 -delete 清理过期备份,
+7表示“7天前及更早”,不是“满7天” - 所有关键操作后加
echo或写入日志文件,例如echo "[$(date)] backup done" >> /var/log/backup.log
确保脚本能被 cron 正确调用
权限和路径是两个最常出问题的地方:
- 脚本开头必须有
#!/bin/bash,且保存为 Unix 格式(无\r) - 赋予执行权限:
chmod +x /path/to/backup.sh - cron 中调用时,**务必写绝对路径**,比如
/bin/bash /root/scripts/backup.sh,不能用~/scripts/backup.sh - 建议在脚本第一行加
set -e,让任意命令失败立即退出,避免后续步骤误执行 - 如果脚本里用了环境变量(如
$PATH),cron 默认环境精简,需在脚本中显式定义或用完整路径调用命令(如/usr/bin/tar)
配置定时任务(crontab)
用 crontab -e 编辑当前用户任务,一行一条规则:
- 每天凌晨 2:15 执行:
15 2 * * * /bin/bash /root/scripts/backup.sh - 每周一上午 9 点执行:
0 9 * * 1 /bin/bash /root/scripts/backup.sh - 编辑后可用
crontab -l确认是否生效;日志建议重定向到文件,例如15 2 * * * /root/scripts/backup.sh >> /var/log/backup_cron.log 2>&1 - 注意:系统级任务写在
/etc/crontab,需额外指定运行用户(如root),而用户级 crontab 不需要
备份内容与恢复验证不能省
自动化的前提是“可信”,光跑起来不算成功:
- 备份目标要明确:网站文件、数据库导出(
mysqldump)、配置文件(/etc/nginx,/etc/ssh)等,分开备份更易管理 - 数据库备份建议先
mysqldump -u user -p'pass' db_name > /tmp/db.sql,再 tar 打包,避免直接 tar 数据目录引发一致性问题 - 每月至少手动抽检一次备份文件:
tar -tzf backup_20260601.tar.gz | head -n 5看是否可读、结构完整 - 恢复测试不必每次都做,但首次上线、重大变更后,一定要用测试环境验证解压+还原流程是否通











