私は、リモートサーバー上のデータをバックアップし、それを標準出力に出力するLinux上で実行される(Pythonで書かれた)ユーティリティ/スクリプトを作成しています。現在私は cron でこのスクリプトを定時に実行し、出力を次のファイルにリダイレクトします。
./mybackupscript > ~/backups/mybackupファイル
時々バックアップは失敗します(たとえば、ネットワーク接続が中断されたり、リモートサーバーのタイムアウト)。これは、標準出力コンテンツが不完全または欠落していることを意味します。ユーティリティはうまく動作します。これが発生すると、ゼロ以外の終了コードで終了します。ただし、現在のバックアップファイルはまだ空であるか不完全です。私はそれが元のコンテンツ(私のスクリプトの最後の成功した実行から)を維持したいと思います。
バックアップをより強力にするためにこの問題を処理する最も適切な「Unix-y」方法は何ですか?バックアップが有効な場合にのみ一時ファイルに出力してから、最終ファイルにコピーする必要がありますか?
答え1
バックアップが有効な場合にのみ一時ファイルに出力してから、最終ファイルにコピーする必要がありますか?
コピーせずに名前を変更します。
しかし、バックアップスクリプトがstdout
。これは外部で行う必要があります。
if ./script.sh >backup.tmp; then
mv backup.tmp backup
else
rm backup.tmp
fi