Dosyalar başarıyla aktarılıncaya kadar rsync art arda nasıl aranır


27

Dosyaları güvenilir olmayan bir uzak sunucudan senkronize etmeye çalışıyorum, yani bağlantı "rastgele" olarak başarısız oluyor

rsync: beklenmedik şekilde kapalı bağlantı

Rsync, --partial ile çağrılır, bu yüzden dosyalar tamamen aktarılıncaya kadar bir döngüde rsync'i çağırabilmek istiyorum. RSync'e yeniden denemesini söyleyecek bir bayrak yok gibi görünüyor.

Senaryo yazmanın en iyi yolu nedir? Döngü için bir bash?


1
Aşağıdaki cevaplar faydalı olsa da, neden başarısız olduğunu bulmak ve onu durdurmak için daha iyi bir fikir olabilir. Sunucuyu, istemciyi ve ağı aralarında kontrol ettiğinizi varsayıyorum, böylece nasıl kapatıldığını görmek için çeşitli yerlerde tcpdump çalıştırabilirsiniz. Güvenlik duvarınızdan veya VPN cihazlarınızdan biri bağlantıyı kapatıyor olabilir mi?
MarkR

Bağlandığı sunucu paylaşılan bir ana bilgisayar olduğu için kök erişim hakkım yok. Neden kapanmakta olduğunu araştırabilirim, ancak şimdilik yeniden denemekten çok mutluyum. Neyse Uyarın için teşekkürler
Bruno Lopes

Rsync'in yeniden deneme yeteneğine sahip olmadığını keşfettiğimde şok oldum!
Michael

rsync --partial --append, el ile veya geri dönüş kodunu kontrol eden bir komut dosyasında yeniden deneme özelliğine sahiptir. Çoğaltıcı: superuser.com/questions/302842/…
rickfoosusa

Yanıtlar:


29

Her şeyi bir senkronizasyonda senkronize ediyorsanız, rsync size başarılı bir dönüş kodu verene kadar bir döngüde rsync'i arayın.

Gibi bir şey:

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

Bu, 0 dönüş kodu verene kadar rsync çağırarak döngüye girer. Sunucunuzu DOS'luk yapmaktan uzak tutmak için oraya bir uyku eklemek isteyebilirsiniz.


28
sadece yazabiliyorsun! rsync -a ....; 5 uyu; bitmiş
Justin

1
sadece bunu nasıl kullandığınıza dikkat edin, örneğin, cron üzerinden çalıştırmayı denediyseniz, eşzamanlılık sorunlarıyla karşılaşabilirsiniz.
Keiran Holloway

3
Geçişsiz bir hata varsa (ör. Dosya okuma veya yazma izni gibi), bu sonsuz bir döngüye dönüşecektir. Rsync'in çıkış durumunu belirli ağ hataları için kontrol RC=12; while [[ $RC -eq 12 || $RC -eq 30 ]]etmenizi öneririm (ya da ağ kesintilerinden hangi çıkış durumlarını görüyorsanız).
Gordon Davisson

1
Bunu (tamamen) katılımsız çalıştırmadığım için, sonsuz döngüler ve eşzamanlılık sorun değil, teşekkür ederim.
Bruno Lopes,

2
Bir utanç verici rsync bu özelliğe sahip değildir, çünkü otomatik kimlik doğrulamanın mevcut olmadığı veya uygun olmadığı durumlarda herhangi bir kabuk tabanlı döngü bir parola ister.
Michael,


1

hepsini sshpass ile birlikte tasfiye etmek

while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ remoteuser@1.1.1.1:/dest/; do sleep 5;done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.