バックアップスクリプトにgzipファイルチェックを追加したいです。
私のバックアップスクリプトは、次のようにstdoutとstderrのログを生成します。
scp -i $BCKIDENTITYFILE $BCKLOG "$BCKREMOTEUSER"@"$BCKHOST":$BCKREMOTEDIR 2>> $BCKERRLOG 1>> $BCKLOG
私がこれをテストしたとき:
# this prints OK to error.log, nothing to output.log
gzip -v -t existingfile.sql.gz 2>> error.log 1>> output.log
# prints missing file message to error.log, nothing to output.log
gzip -v -t notexistingfile.sql.gz 2>> error.log 1>> output.log
私は何が間違っていましたか?
答え1
問題は、標準エラー2 >>(2 >>)および標準出力(1 >>)ストリームを別々のログファイルにリダイレクトしますが、gzipがステータス情報とエラーメッセージを標準エラーストリームに書き込んでいることです。
gzip -v -t Existingfile.sql.gz コマンドを実行するときに -v オプションを使用すると、gzip はファイル名、ソース、圧縮サイズ、圧縮率などの圧縮ファイルに関する追加情報を出力します。この情報は標準エラーストリームに書き込まれ、スクリプトの error.log ファイルにリダイレクトされます。
ファイルが存在しない場合は、「gzip:noteexistingfile.sql.gz:そのファイルまたはディレクトリはありません」というメッセージも標準エラーストリームに送信され、error.logにリダイレクトされます。
この問題を解決するには、標準エラーと標準出力ストリームを同じファイルにリダイレクトして、ステータス情報とエラーメッセージの両方をoutput.logファイルに書き込むことができます。
gzip -v -t 既存の file.sql.gz &>> output.log 標準エラーと標準出力を output.log ファイルにリダイレクトするため、gzip 確認結果を 1 つのファイルに表示できます。
または、次のように標準エラーを標準出力にリダイレクトし、標準出力をoutput.logファイルにリダイレクトすることもできます。
gzip -v -t 既存ファイル.sql.gz 2>