处理可能失败的备份命令的标准输出的最 Unix 风格的方法是什么?

处理可能失败的备份命令的标准输出的最 Unix 风格的方法是什么?

我正在编写一个在 Linux 上运行的实用程序/脚本(碰巧是用 Python 编写的),它从远程服务器备份数据,并输出到标准输出。目前,我在 cron 的整点运行此脚本,并将输出重定向到一个文件,如下所示:

./mybackupscript > ~/backups/mybackupfile

有时备份会失败(例如,网络连接中断或远程服务器超时) - 这意味着标准输出内容不完整或丢失。该实用程序表现良好 - 当发生这种情况时,它会以非零退出代码退出。但是,备份文件此时仍为空或不完整。我希望它保留其原始内容(来自上次成功运行我的脚本)。

处理这个问题最合适的“Unix-y”方式是什么,以使备份更加健壮?我是否应该输出到临时文件,然后仅在备份有效的情况下将其复制到最终文件?

答案1

我是否应该输出到临时文件,然后仅在备份有效的情况下将其复制到最终文件?

不是复制而是重命名。

但如果备份脚本写入stdout.它甚至无法阻止创建空文件,因为脚本启动时已经发生了这种情况。这必须从外部完成。

if ./script.sh >backup.tmp; then
  mv backup.tmp backup
else
  rm backup.tmp
fi

相关内容