web-dev-qa-db-ja.com

ファイルが正常に転送されるまでrsyncを繰り返し呼び出す方法

信頼できないリモートサーバーのファイルを同期しようとしています。つまり、接続が「ランダムに」失敗する傾向があります。

rsync:接続が予期せず閉じられました

Rsyncは--partialで呼び出されるので、ファイルが完全に転送されるまでループでrsyncを呼び出すことができます。 rsyncに再試行を指示するフラグはないようです。

それをスクリプト化する最良の方法は何でしょうか?ループのbash?

30
Bruno Lopes

1回の同期ですべてを同期する場合は、rsyncが正常な戻りコードを返すまで、ループでrsyncを呼び出します。

何かのようなもの:

RC=1 
while [[ $RC -ne 0 ]]
do
   rsync -a .....   
   RC=$?
done

これは、戻りコードが0になるまでrsyncを呼び出してループします。サーバーにDOSを実行しないようにするために、そこにスリープを追加することができます。

31
David

しばらく前に同じ問題に遭遇しました。結局、Davidの答えに似たものを書きましたが、最大の再試行、Ctrl-Cなどへの応答など、少しうんざりしました http://blog.iangreenleaf.com/2009/03/rsync- and-retrying-until-we-get-it.html

11

sshpassですべてをまとめる

while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ [email protected]:/dest/; do sleep 5;done
1
Toolkit