信頼できないリモートサーバーのファイルを同期しようとしています。つまり、接続が「ランダムに」失敗する傾向があります。
rsync:接続が予期せず閉じられました
Rsyncは--partialで呼び出されるので、ファイルが完全に転送されるまでループでrsyncを呼び出すことができます。 rsyncに再試行を指示するフラグはないようです。
それをスクリプト化する最良の方法は何でしょうか?ループのbash?
1回の同期ですべてを同期する場合は、rsyncが正常な戻りコードを返すまで、ループでrsyncを呼び出します。
何かのようなもの:
RC=1
while [[ $RC -ne 0 ]]
do
rsync -a .....
RC=$?
done
これは、戻りコードが0になるまでrsyncを呼び出してループします。サーバーにDOSを実行しないようにするために、そこにスリープを追加することができます。
しばらく前に同じ問題に遭遇しました。結局、Davidの答えに似たものを書きましたが、最大の再試行、Ctrl-Cなどへの応答など、少しうんざりしました http://blog.iangreenleaf.com/2009/03/rsync- and-retrying-until-we-get-it.html 。
sshpassですべてをまとめる
while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ [email protected]:/dest/; do sleep 5;done