备份脚本必须自带检查能力,开头加set -e,检查源目录、目标磁盘剩余空间和上一次备份进程;备份后验证包完整性并生成SHA256校验文件;crontab需显式声明环境变量并重定向日志;清理旧备份前先预览再执行,同步删除校验文件并记录日志。

备份脚本必须自带检查能力
脚本不能只管打包,得在执行过程中主动确认每一步是否成功。开头加 set -e,让任意命令失败立即退出,避免“半截备份”被当成成功。关键节点插入检查逻辑:源目录是否存在(test -d /data)、目标磁盘剩余空间是否大于5GB(用 df -B1 /backup | awk 'NR==2 {print $4}' 获取字节数)、上一次备份进程是否还在运行(pgrep -f "backup.sh" | wc -l 大于1就中止)。这些不是可选项,是防止静默失败的第一道防线。
每次备份后必须验证包完整性
生成压缩包不等于备份可用。脚本末尾必须做校验:用 tar -tzf "$BACKUP_DIR/$FILENAME" >/dev/null 2>&1 检查能否正常列出内容;失败则输出错误并退出。更进一步,可同步生成 SHA256 校验文件:sha256sum "$BACKUP_DIR/$FILENAME" > "$BACKUP_DIR/${FILENAME%.tar.gz}.sha256"。这样后续抽样解压或异地恢复前,先比对哈希值就能快速识别损坏包。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
定时任务要带环境与日志闭环
crontab 不继承 shell 环境,所以不能直接抄终端命令。在 crontab 条目开头显式声明:PAGE=/usr/local/bin:/usr/bin:/bin HOME=/root,再写执行命令。务必重定向输出:0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1。脚本内部也建议在关键步骤写日志,比如 echo "$(date): start rsync from /etc" >> /var/log/backup.log。定期用 tail -n 10 /var/log/backup.log 查最近记录,比等出事再翻几十万行日志高效得多。
清理逻辑要安全且可预演
自动删旧备份很危险,不能一上来就 -delete。先用 find /backup -name "backup_*.tar.gz" -mtime +7 -print 把待删列表打出来,人工确认无误后再换 -delete。配套清理 .sha256 文件也要同步执行,避免校验文件残留造成混乱。清理动作本身也应记入日志,例如:echo "$(date): removed $(find /backup -name 'backup_*.tar.gz' -mtime +7 | wc -l) old backups" >> /var/log/backup.log。

















