用 cron 和 Shell 脚本做每日自动备份
【摘要】 服务器上的重要目录最好每天自动备份。本文用 Shell 脚本加 cron,在 Linux 上实现一个最简单可靠的方案。1. 备份脚本#!/bin/bashset -euo pipefailSRC=/var/www/dataDST=/backupmkdir -p "$DST"tar czf "$DST/data-$(date +%F).tar.gz" "$SRC"find "$DST" -na...
服务器上的重要目录最好每天自动备份。本文用 Shell 脚本加 cron,在 Linux 上实现一个最简单可靠的方案。
1. 备份脚本
#!/bin/bash
set -euo pipefail
SRC=/var/www/data
DST=/backup
mkdir -p "$DST"
tar czf "$DST/data-$(date +%F).tar.gz" "$SRC"
find "$DST" -name 'data-*.tar.gz' -mtime +7 -delete
保存为 /usr/local/bin/backup.sh 并执行 chmod +x。脚本打包目录,并删除 7 天前的旧备份。
2. 配置 cron
执行 crontab -e,加入:
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
每天凌晨 2:30 运行,日志写入 backup.log。
3. 验证
手动运行一次脚本,用 ls -lh /backup 查看结果,再用 tar tzf 检查包内容。
4. 从备份恢复
恢复时先解压到临时目录确认内容,再覆盖原目录:
mkdir -p /tmp/restore
tar xzf /backup/data-2026-11-12.tar.gz -C /tmp/restore
ls /tmp/restore/var/www/data
确认无误后再用 rsync -a 同步回 /var/www/data。备份从没恢复演练过,就不算真正可用。
5. 几个容易踩的坑
- cron 的环境变量很少,PATH 可能找不到命令,脚本里尽量写绝对路径,或在开头 export PATH。
- 备份盘和数据盘最好不是同一块盘,否则磁盘损坏时一起丢。可以再加一行 rsync 推到另一台机器。
- 用 set -euo pipefail,脚本出错会立刻退出,日志里能看到失败原因,而不是悄悄生成一个空包。
- 定期看一眼 /var/log/backup.log 和备份文件大小,大小突然变成几 KB 往往说明源目录出了问题。
小结
一个十行左右的脚本加一行 crontab,就能得到“每天备份、保留 7 天”的基本保障。规模变大后再考虑 restic、borg 这类支持增量和加密的工具。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)