rsyncを使用してsshで大量のデータ(> 80 GB)を転送する必要があります。すべてが正常に機能していますが、バックアップデータの送信元であるDSL接続は最大3分間、24時間に1回切断されます(プロバイダーの切り替えはオプションではありません)。
方法:
- 接続がバックアップされたときに転送を自動的に再開しますか? 
- 誤って同時に2つのrsyncコマンドが実行されていないことを確認しますか? 
rsyncを使用してsshで大量のデータ(> 80 GB)を転送する必要があります。すべてが正常に機能していますが、バックアップデータの送信元であるDSL接続は最大3分間、24時間に1回切断されます(プロバイダーの切り替えはオプションではありません)。
方法:
接続がバックアップされたときに転送を自動的に再開しますか?
誤って同時に2つのrsyncコマンドが実行されていないことを確認しますか?
回答:
以下が役立つはずです。
#!/bin/bash
while [ 1 ]
do
    rsync -avz --partial source dest
    if [ "$?" = "0" ] ; then
        echo "rsync completed normally"
        exit
    else
        echo "Rsync failure. Backing off and retrying..."
        sleep 180
    fi
done
接続が切断されると、rsyncはゼロ以外の終了コードで終了します。このスクリプトは単純にrsyncを再実行し続け、同期が正常に完了するまで続行します。
これはPeterの答えとほぼ同じですが、ユーザーはどのリモートファイルが必要で、どこに保存するかを選択できます(sshでrsyncを実行することもできます)。USERとHOSTをそれぞれユーザー名とホストに置き換えます。
#!/ bin / bash
echo -e「完全な(エスケープされた)ファイルパスを入力してください:」
read -rパス
echo "パス:$ path"
echo -e "宛先を入力してください:"
読み取り-r dst
echo "宛先:$ dst"
一方[1]
行う
    rsync --progress --partial --append -vz -e ssh "USER @ HOST:$ path" $ dst
    if ["$?" = "0"]; それから
        echo "rsyncが正常に完了しました"
        出口
    他に
        echo "rsyncが失敗しました。1分後に再試行します..."
        寝る60
    fi
やった
ここで使用するrsyncオプションを使用すると、転送中の進行状況の統計、予期しない障害が発生した場合の部分ファイルの保存、再開時に部分的に完了したファイルへの追加が可能になります。-vオプションは冗長性を高め、-zオプションは圧縮を有効にします(低速接続には適していますが、両端でより多くのCPUパワーが必要です)。-eオプションを使用すると、この転送をsshで実行できます(暗号化は常に適切です)。
注:これは、sshで公開キーログインを有効にしている場合にのみ使用してください。そうしないと、再起動時にパスワードの入力を求められます(スクリプトのすべての機能を停止します)。
スーパーバイザーデーモン(プロセスコントロールマネージャー)は、次のような同様の構成で、両側のrsa証明書を作成した後に非常にうまく機能します:(/ etc / supervisor / Supervisord.confは、Debianベースのシステムの構成ファイルパスです)
[program:rsync-remoteserver]
command=rsync -avz --progress root@server.com:/destination /backup-path
stdout_logfile=/out-log-path  
stderr_logfile=/errlogpath
@Peterの答えは非常に便利なようですが、私にとっては--updateオプションを使用することが重要でした。接続が再開された後、--updatersyncが最初からすべて同期しようとしていませんでした。で--update、すでに存在するファイルはスキップされます。
rsync --partial --update --progress -r [SOURCE] [DESTINATION]
--updateすでに存在するファイルをスキップします...ターゲットに完全にコピーされていないファイルを含めます。ほとんどのユースケースに反すると思います。
                    rsync --partial --update file1 remotehost:file1。コマンドはでした。15%を転送した後、転送を中断しました(kill -KILL)。
                    
while ./run_script; do echo "Retrying..."; done; echo "Done."しrun_scriptたら必ず返品0してください。