用shell脚本配合cron实现定时加密压缩备份,核心是打包→加密→清理旧备份→记录日志的自动化流程,关键在权限、路径、密码安全和错误处理。

用 shell 脚本配合 cron 实现定时加密压缩备份,核心是把“打包 → 加密 → 清理旧备份 → 记录日志”串成自动化流程,关键在权限、路径、密码安全和错误处理。
准备加密环境与备份目标
确保系统已安装 gpg(推荐)或 openssl,并提前生成 GPG 密钥对(非对称加密更安全):
- 运行
gpg --gen-key创建密钥,记下密钥 ID(如ABC12345) - 备份目录需有读取权限,目标存储路径(如
/backup/)需有写入权限 - 避免将密码明文写进脚本:用
gpg --decrypt从加密文件读取密码,或使用gpg-agent缓存密钥
编写可执行的备份脚本
以下是一个轻量、带基础校验的示例(保存为 /usr/local/bin/backup.sh):
#!/bin/bash
# 配置区(按需修改)
SOURCE_DIR="/home/user/data"
BACKUP_DIR="/backup"
GPG_RECIPIENT="ABC12345" # 你的公钥ID
RETENTION_DAYS=7
<h1>生成时间戳标识</h1><p>TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
ARCHIVE<em>NAME="backup</em>${TIMESTAMP}.tar.gz"
ENCRYPTED_NAME="${ARCHIVE_NAME}.gpg"</p><h1>进入源目录防止绝对路径问题</h1><p>cd "$SOURCE_DIR" || { echo "无法进入 $SOURCE_DIR"; exit 1; }</p><h1>打包并压缩(排除临时文件)</h1><p>tar --exclude='*.tmp' --exclude='/proc' --exclude='/sys' -czf "/tmp/$ARCHIVE_NAME" . 2>/dev/null \
|| { echo "打包失败"; exit 1; }</p><h1>加密(使用公钥,无需暴露密码)</h1><p>gpg --encrypt --recipient "$GPG_RECIPIENT" --output "$BACKUP_DIR/$ENCRYPTED_NAME" "/tmp/$ARCHIVE_NAME" \
|| { echo "加密失败"; rm -f "/tmp/$ARCHIVE_NAME"; exit 1; }</p><h1>清理临时包</h1><p>rm -f "/tmp/$ARCHIVE_NAME"</p><h1>删除超过保留天数的旧备份</h1><p>find "$BACKUP<em>DIR" -name "backup</em>*.tar.gz.gpg" -mtime "+$RETENTION_DAYS" -delete</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6580" title="Linux installer"><img
src="https://img.php.cn/upload/skill/000/000/081/179101817874041.jpg" alt="Linux installer" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6580" title="Linux installer" class="overflowclass">Linux installer</a>
<p class="overflowclass">先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6580" title="Linux installer" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><h1>记录日志</h1><p>echo "$(date): 备份完成 → $ENCRYPTED_NAME" >> /var/log/backup.log
</p>
赋予执行权限:chmod +x /usr/local/bin/backup.sh
配置定时任务(cron)
用 crontab -e 添加任务,例如每天凌晨 2:15 执行:
15 2 * * * /usr/local/bin/backup.sh >/dev/null 2>&1
注意点:
- 脚本中所有路径用绝对路径,避免 cron 环境变量缺失导致失败
- 首次运行建议手动执行一次:
/usr/local/bin/backup.sh,检查日志和输出 - 若用
openssl替代 gpg,命令类似:openssl enc -aes-256-cbc -salt -in archive.tar.gz -out archive.tar.gz.enc -kfile /path/to/passwd.file,但需额外管理密码文件权限(chmod 600)
验证与维护要点
备份不是“设了就完事”,需定期抽检:
- 手动解密测试:
gpg --decrypt /backup/backup_*.tar.gz.gpg | tar -tz(仅列出内容,不释放) - 检查日志是否有报错:
tail -n 20 /var/log/backup.log - 确认磁盘空间充足:
df -h $BACKUP_DIR,可在脚本开头加入空间判断逻辑 - GPG 密钥备份到离线介质,避免密钥丢失导致所有备份不可用
不复杂但容易忽略。










