rsync に関する 2 つの質問 - 転送とログの途中での失敗

rsync に関する 2 つの質問 - 転送とログの途中での失敗

私は、ローカル サーバーからリモート ログ サーバーにデータを移動するために rsync を使用するログ バックアップ ソリューションを実装しようとしています。懸念事項が 2 つあります。1 つ目は、現時点では必要なログを実装していないことです。rsync のマニュアル ページは膨大で、rsync サーバーは使用せず、クライアント (クライアントが開始) からストレージ サーバーにデータをプッシュするためにオンコール rsync のみを使用しています。

思いつく限りですが、転送途中での失敗などを記録するオプションはありますか?

また、実装方法の性質上、シェル スクリプトは最初にローカル バックアップ サーバーに ping を試みます。ping が成功すると、ファイルがアップロードされます。ただし、ping が失敗すると、代わりに地理的に冗長化されたバックアップ サーバーにアップロードされます。これにより、rsync の途中でメイン サーバーがダウンすると、穴が残ります。転送中に障害が発生した場合に、バックアップ先を指定する方法はありますか?

答え1

rsync には、組み込みのフェイルオーバー オプションや特別なエラー ログ (stderr に出力されるもの以外) はないと思います。オプションはあります--log-file=--log-file-format=、これらは接続の失敗ではなく、更新されたファイルのログに重点を置いています。クライアント側で rsync の終了ステータスを確認し、接続の問題を示すエラー番号 (10、12、30 が関係しているようですが、テストすることでより正確に把握できます) の場合は、別の到達可能なサーバーをスキャンして再試行することをお勧めします。rsync の stderr 出力をキャプチャして、それを直接ログに記録するか、認識されたエラーをスキャンしてログにまとめることもできます。

サーバー側でもログを記録したい場合は、rsync を通常どおり実行し (rsync "$@"引数を渡すため)、終了ステータスをチェックしてログに記録するラッパー スクリプトを作成します。スクリプト自体が (stdout または stderr に) 何も出力しないことを確認してください。そうしないと、リモート rsync クライアントが混乱する可能性があります。

関連情報