主 题:备份任务天天显示成功,真去恢复时才发现是空的
发 布 者:webblekubera
标签分类: 技术
时 间:2026-09-17 18:11:45
内容预览:分享一个自己踩过的坑,家里那台常开的小主机上跑的每日备份。现象备份脚本每天夜里跑,日志里都是"完成",退出码也是 0,我就一直没管。直到有一次想恢复一个旧文件,打开备份仓库才发现,最近一段时间的提交几乎都是空的。原因有两个,叠在一起定时任务的环境变量跟终端里不一样。PATH 很精简,脚本里调用的打包命令根本找不到,报错直接打到 stderr 里去了。脚本写的是 命令 | tee 日志。管道的退出码取的是最后一个命令,tee 执行成功,所以整条命令还是返回 0。前面那一步失败了,外面完全看不出来。后来的改法脚本开头加 set -euo pipefail,管道里任何一步失败都算失败定时任务里用到的命令一律写绝对路径,或者在脚本里自己把 PATH 设好备份完做个最基本的校验:产物大小跟上一次比,突然变得特别小就告警,不再只看退出码定期真的做一次恢复演练,挑几个文件恢复到临时目录,跟原文件比对教训没做过恢复验证的备份,只能算"大概有备份"。退出码为 0 只能说明最后一个命令没报错,不代表活真干完了。现在我所有定时任务都按这个标准重新过了一遍,另外还翻出两个同样在悄悄失败的任务。
直达链接: https://www.nodeseek.com/post-933932-1
发 布 者:webblekubera
标签分类: 技术
时 间:2026-09-17 18:11:45
内容预览:分享一个自己踩过的坑,家里那台常开的小主机上跑的每日备份。现象备份脚本每天夜里跑,日志里都是"完成",退出码也是 0,我就一直没管。直到有一次想恢复一个旧文件,打开备份仓库才发现,最近一段时间的提交几乎都是空的。原因有两个,叠在一起定时任务的环境变量跟终端里不一样。PATH 很精简,脚本里调用的打包命令根本找不到,报错直接打到 stderr 里去了。脚本写的是 命令 | tee 日志。管道的退出码取的是最后一个命令,tee 执行成功,所以整条命令还是返回 0。前面那一步失败了,外面完全看不出来。后来的改法脚本开头加 set -euo pipefail,管道里任何一步失败都算失败定时任务里用到的命令一律写绝对路径,或者在脚本里自己把 PATH 设好备份完做个最基本的校验:产物大小跟上一次比,突然变得特别小就告警,不再只看退出码定期真的做一次恢复演练,挑几个文件恢复到临时目录,跟原文件比对教训没做过恢复验证的备份,只能算"大概有备份"。退出码为 0 只能说明最后一个命令没报错,不代表活真干完了。现在我所有定时任务都按这个标准重新过了一遍,另外还翻出两个同样在悄悄失败的任务。
直达链接: https://www.nodeseek.com/post-933932-1