我正在编写一个在 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