Jak mogę wstrzymać / wznowić rsync

49

Jak mogę zatrzymać uruchomioną rsync?

Za pierwszym razem zrobiłem Ctrl+, Caby go zabić i użyłem -Pflagi, aby uruchomić ponownie. Czy to może uszkodzić bieżący transfer plików?

Za drugim razem po prostu usypiam MacOS (zamykając pokrywę). Patrząc na uruchomiony proces, widzę 2 (nie wiem dlaczego) o statusie „S”.

Próbowałem za pomocą

kill -SIGCONT

wznowić proces, ale nie przynosi to efektu.

qnoid
źródło

Odpowiedzi:

61

Możesz wstrzymać dowolny program, wysyłając mu TSTP(uprzejmy) lub STOP(wymuszony) sygnał. Na terminalu, rsyncw którym się znajdujesz, naciśnij Ctrl+ Zwysyła TSTP. Wznów za pomocą polecenia fglub bgw terminalu lub CONTsygnału.

Bezpiecznie jest zabić proces rsync i uruchomić wszystko ponownie; będzie kontynuowane tam, gdzie zostało przerwane. Może to być trochę nieefektywne, szczególnie jeśli nie przeszedłeś --partial(wliczony w -P), ponieważ rsyncsprawdzi ponownie wszystkie pliki i przetworzy plik, który został przerwany od zera.

Mogą występować nietypowe kombinacje opcji, które spowodują, że niektóre pliki nie zostaną poprawnie zsynchronizowane, być może --inplacez czymś innym, ale myślę, że żadna opcja nie spowoduje tego.

Jeśli odłączysz laptopa i podłączysz go w innym miejscu, może on uzyskać inny adres IP. Wtedy połączenie TCP używane przez rsync zostanie zerwane, więc będziesz musiał go zabić i zacząć od nowa. Może się to zdarzyć również w przypadku zawieszenia laptopa i przekroczenia limitu czasu połączenia TCP. Limit czasu zostanie ostatecznie odfiltrowany do poziomu aplikacji, ale może to chwilę potrwać. Można bezpiecznie nacisnąć Ctrl+ Ci ponownie uruchomić rsync.

Gilles „SO- przestań być zły”
źródło
1
W rzeczywistości zabicie rsync -avhpo prostu powoduje utratę kopiowanego pliku, jeśli plik jest duży, tracisz sporo czasu. Może Ctrl+zprzeniesienie pliku tymczasowego (zacznij od kropki), a następnie Ctrl-Crsync może być lepszym rozwiązaniem.
Malat
Dzięki za tak szczegółowe wyjaśnienie. Aby wyjaśnić: ctrl + z, aby wstrzymać, fg, aby wznowić, bg, aby zatrzymać.
Praesagus
3
@Praesagus bgumieścić procesu do b ack g rundzie , nie zatrzyma.
Jari Keinänen
--partialjest to, czego potrzebowałem. Próbuję skopiować 21 GB danych, a wśród nich mam plik 6,6 GB. Problem polega na tym, że sieć niszczy moje połączenie po kilku GB transferu danych, do czego --partialdokładnie potrzebuję.
AnthonyD973
20

Ctrl+ Zzawiesić i:

$ fg

aby kontynuować, użyj

$ jobs

zobaczyć zawieszone prace; bg [number]w tle; fg [number]na pierwszym planie.

gauteh
źródło
2
Ctrl+Szawiesza tylko przewijanie danych wyjściowych, a nie bazowy program (chyba że zostanie zablokowany, czekając, aż terminal zaakceptuje jego dane wyjściowe) i tylko wtedy, gdy go nie wyłączono.
Gilles „SO- przestań być zły”
1
Przy obecnym stanie „S” nie jest wznawiany. Czy zabicie go przy użyciu Ctrl + C i ponowne uruchomienie rsync jest bezpieczne? Jakie inne opcje mam? Będę miał to na uwadze następnym razem, dzięki.
qnoid 16.01.11
1
Zauważ również, że Ctrl-Z, aby zawiesić proces, może po pewnym czasie spowodować przekroczenie limitu czasu jakichkolwiek połączeń sieciowych TCP ustanowionych przez ten program. W ten sposób pozostawienie rsync zawieszonego na dłużej niż kilka minut najprawdopodobniej spowoduje jego gwałtowne zamknięcie z komunikatem o błędzie, gdy umieścisz go z powrotem na pierwszym planie i stwierdzi, że jego otwarte gniazda zwracają błędy z odczytów i zapisów.
Jim Dennis
8

Uruchom rsyncz --partialflagą. Następnie zachowa częściowe transfery i wznowi częściowe pliki po uruchomieniu.

bahamat
źródło
5

Ludzie tutaj wspominali, że użycie --partialflagi działa, należy jednak wspomnieć, że wznawia się tylko wtedy, gdy flaga --appendlub --append-verifyjest używana podczas wznawiania.

--partialtworzy ukryty plik pliku, który nie zakończył procesu synchronizacji, plik jest zachowywany po przerwaniu synchronizacji. Nadal uzupełnia plik, gdy użyjesz go --appendpo wznowieniu, w przeciwnym razie, gdy nie będzie używany --append, niekompletny ukryty plik zostanie zachowany i pozostanie niekompletny.

Wniosek: Możesz po prostu przerwać rsync --partialza pomocą Ctrl+, Cjeśli użyjesz go rsync --appendpodczas wznawiania

(Źródło: Czy rsync może zostać wznowiony po przerwaniu? Pobrano 5 kwietnia 2016 r.)

Mehdi Nellen
źródło
więc jeśli użyłem rsync --avP <source> <destination>, muszę go zatrzymać CTRL + C, a następnie wznowić, pisząc rysnc --append?
kingmakerking
@kingmakerking yes
Mehdi Nellen
@kingmakerking: Nie. Nadal potrzebujesz opcji z pierwszego rsync oraz źródła i miejsca docelowego. Aby wznowić, uruchom ponownie poprzednie polecenie rsync i dodaj --append do istniejących opcji.
mivk,