Muszę przesyłać duże ilości danych (> 80 GB) przez ssh przy użyciu rsync. Wszystko działa dobrze, ale połączenie DSL, z którego wysyłane są dane kopii zapasowej, będzie przerywane co 24 godziny na maksymalnie 3 minuty (zmiana dostawcy nie jest opcją).
Jak ja:
Czy zrestartować transfer automatycznie, gdy połączenie zostanie ponownie utworzone?
Upewnij się, że przypadkowo nie są uruchomione dwie komendy rsync?
linux
command-line
ssh
rsync
Sathyajith Bhat
źródło
źródło
while ./run_script; do echo "Retrying..."; done; echo "Done."
Upewnij się, żerun_script
wraca0
na sukces.Odpowiedzi:
Pomocne powinny być:
Po zakończeniu połączenia rsync zakończy działanie z niezerowym kodem wyjścia. Ten skrypt po prostu ponownie uruchamia rsync, pozwalając mu kontynuować do momentu normalnego zakończenia synchronizacji.
źródło
Robi to podobnie jak odpowiedź Petera, ale daje użytkownikowi możliwość wyboru pliku zdalnego i miejsca, w którym chce go zapisać (a także przeprowadzić rsync przez ssh). Zastąp USER i HOST odpowiednio nazwą użytkownika i hostem.
Użyte tutaj opcje rsync umożliwiają statystyki postępu podczas przesyłania, zapisywanie częściowych plików w przypadku nieoczekiwanego niepowodzenia oraz możliwość dołączania do częściowo ukończonych plików po wznowieniu. Opcja -v zwiększa gadatliwość, opcja -z włącza kompresję (dobre dla wolnego połączenia, ale wymaga większej mocy procesora na obu końcach), a opcja -e umożliwia nam przeprowadzenie tego transferu przez ssh (szyfrowanie jest zawsze dobre).
Uwaga: używaj tego tylko, jeśli masz włączoną funkcję logowania do klucza publicznego za pomocą ssh, w przeciwnym razie poprosi cię o hasło przy ponownym uruchomieniu (zabijając całą funkcjonalność skryptu).
źródło
demon supervisora (menedżer kontroli procesu) może działać bardzo dobrze po utworzeniu certyfikatów RSA obu stron, z podobną konfiguracją jak poniżej: (/ etc / supervisor / supervisord.conf to ścieżka do pliku konfiguracyjnego w systemach opartych na Debianie)
źródło
Odpowiedź @ Peter wydaje się bardzo przydatna, ale dla mnie ważne było użycie
--update
opcji. Po wznowieniu połączenia, bez--update
rsync próbował synchronizować wszystko od samego początku. Za pomocą--update
plików, które już istnieją, są pomijane.rsync --partial --update --progress -r [SOURCE] [DESTINATION]
źródło
--update
pomija pliki, które już istnieją ... W tym te, które nie zostały całkowicie skopiowane do celu. Myślę, że jest to sprzeczne z większością przypadków użycia.rsync --partial --update file1 remotehost:file1
. po przeniesieniu 15% przerwałem transfer (zabij -KILL).