Come posso mettere in pausa / riprendere rsync


49

Come posso mettere in pausa un rsync in esecuzione?

La prima volta che ho fatto Ctrl+ Cper ucciderlo e ho usato la -Pbandiera per correre di nuovo. È incline a corrompere il trasferimento di file corrente?

La seconda volta metto semplicemente in pausa MacOS (chiudendo il coperchio). Osservando il processo in esecuzione posso vedere 2 (non so perché) con uno stato di 'S'.

Ho provato a usare

kill -SIGCONT

per riprendere il processo, ma non ha alcun effetto.

Risposte:


61

Puoi mettere in pausa qualsiasi programma inviandogli un segnale TSTP(educato) o STOP(forzato). Sul terminale in cui ti sei imbattuto rsync, premi Ctrl+ Zinvia TSTP. Riprendi con il comando fgo bgnel terminale o un CONTsegnale.

È sicuro terminare un processo rsync ed eseguire nuovamente tutto; continuerà da dove era stato interrotto. Potrebbe essere un po 'inefficiente, in particolare se non è stato superato --partial(incluso in -P), perché rsynccontrollerà nuovamente tutti i file ed elaborerà il file su cui è stato interrotto da zero.

Potrebbero esserci combinazioni insolite di opzioni che porteranno alla sincronizzazione non corretta di alcuni file, forse --inplacecon qualcos'altro, ma penso che nessuna singola opzione lo causerà.

Se si scollega il laptop e lo si ricollega da qualche altra parte, potrebbe ottenere un indirizzo IP diverso. Quindi la connessione TCP utilizzata da rsync verrebbe interrotta, quindi dovresti ucciderla e ricominciare. Questo può accadere anche se sospendi il laptop e il timeout della connessione TCP. Il timeout finirà per filtrare a livello di applicazione, ma può richiedere del tempo. È sicuro premere Ctrl+ Ced eseguire di nuovo rsync.


1
In realtà uccidere rsync -avhsemplicemente perde il file corrente da copiare, se il file è grande hai perso un bel po 'di tempo. Forse Ctrl+zspostare il file temporaneo (iniziare con un punto) e quindi Ctrl-Crsync potrebbe essere una soluzione migliore.
malat,

Grazie per una spiegazione così dettagliata. Per chiarire: ctrl + z per mettere in pausa, fg per riprendere, bg per fermare.
Praesagus,

3
@Praesagus bgmettere processo al b ack g rotondo , non fermata.
Jari Keinänen,

--partialè quello di cui avevo bisogno. Sto cercando di copiare 21 GB di dati e tra questi ho un file da 6,6 GB. Il problema è che la rete interrompe la mia connessione dopo alcuni GB di trasferimento dati, per cui --partialè esattamente ciò di cui ho bisogno.
AnthonyD973,

20

Ctrl+ Zper sospendere e:

$ fg

per continuare, utilizzare

$ jobs

vedere lavori sospesi; bg [number]per contenerli; fg [number]per metterlo in primo piano.


2
Ctrl+Ssospende solo l'output di scorrimento, non il programma sottostante (a meno che non venga bloccato in attesa che il terminale accetti l'output) e solo se non lo si è disabilitato.
Gilles 'SO- smetti di essere malvagio' il

1
Con l'attuale stato 'S' non riprende. È sicuro ucciderlo usando Ctrl + C ed eseguire di nuovo rsync? Quali altre opzioni ho? Lo avremo in mente la prossima volta, grazie.
qnoid,

1
Si noti inoltre che Ctrl-Z per sospendere un processo è probabile, dopo qualche tempo, provocare il timeout di tutte le connessioni di rete TCP che sono state stabilite da quel programma. Quindi lasciare un rsync sospeso per più di qualche minuto molto probabilmente lo farà chiudere bruscamente con un messaggio di errore quando lo rimetti in primo piano e scopre che i suoi socket aperti stanno restituendo errori da lettura e scrittura.
Jim Dennis,

8

Corri rsynccon la --partialbandiera. Manterrà quindi i trasferimenti parziali e riprenderà i file parziali all'avvio.


5

Le persone qui hanno menzionato l'uso delle --partialopere flag, è necessario ricordare tuttavia che riprende solo quando viene utilizzato il flag --appendo --append-verifyquando si riprende.

--partialcrea un file nascosto del file che non ha completato il processo di sincronizzazione, il file viene mantenuto quando si interrompe la sincronizzazione. Continua a completare il file quando lo si utilizza --appenddopo il ripristino, altrimenti quando non viene utilizzato --append, il file nascosto incompleto viene mantenuto e rimane incompleto.

Conclusione: puoi semplicemente interrompere l' rsync --partialutilizzo di Ctrl+ Cse lo usi rsync --appenddurante la ripresa

(Fonte: rsync può riprendere dopo essere stato interrotto? Recuperato il 5 aprile 2016)


quindi se l'ho usato rsync --avP <source> <destination>, devo metterlo in pausa di CTRL + C e poi riprendere semplicemente digitando rysnc --append?
Kingmaker,

@kingmakerking yes
Mehdi Nellen,

@kingmakerking: No. hai ancora bisogno delle opzioni del tuo primo rsync, della fonte e della destinazione. Per riprendere, riavvii il comando rsync precedente e aggiungi --append le opzioni esistenti.
mivk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.