Comment puis-je mettre en pause / reprendre rsync

49

Comment puis-je mettre en pause un rsync en cours d'exécution?

La première fois que j'ai fait Ctrl+ Cpour le tuer et j'ai utilisé le -Pdrapeau pour courir à nouveau. Est-ce que cela risque de corrompre le transfert de fichier en cours?

La deuxième fois, je mets simplement MacOS en veille (en fermant le couvercle). En regardant le processus en cours, je peux voir 2 (je ne sais pas pourquoi) avec le statut 'S'.

Essayé en utilisant

kill -SIGCONT

pour reprendre le processus, mais cela n’a aucun effet.

qnoïd
la source

Réponses:

61

Vous pouvez suspendre n'importe quel programme en lui envoyant un signal TSTP(poli) ou STOP(forcé). Sur le terminal dans lequel vous êtes entré rsync, appuyez sur Ctrl+ Zenvoie TSTP. Reprendre avec la commande fgou bgdans le terminal ou un CONTsignal.

Il est prudent de tuer un processus rsync et de réexécuter le tout. il continuera là où il s'est arrêté. Cela peut être un peu inefficace, en particulier si vous n’avez pas passé --partial(inclus dans -P), car rsyncil vérifiera à nouveau tous les fichiers et traitera le fichier sur lequel il a été interrompu à partir de zéro.

Il peut y avoir des combinaisons inhabituelles d’options qui peuvent empêcher certains fichiers d’être synchronisés correctement, peut-être --inplaceavec quelque chose d’autre, mais je pense qu’aucune option en sera la cause.

Si vous déconnectez votre ordinateur portable et le reconnectez ailleurs, il peut obtenir une adresse IP différente. Ensuite, la connexion TCP utilisée par rsync serait coupée, il faudrait donc la tuer et recommencer. Cela peut également se produire si vous suspendez votre ordinateur portable et que la connexion TCP expire. Le délai d'attente finira par filtrer au niveau de l'application, mais cela peut prendre un certain temps. Il est prudent d'appuyer sur Ctrl+ Cet de relancer rsync.

Gilles, arrête de faire le mal
la source
1
En réalité, rsync -avhvous perdez simplement le fichier en cours de copie. Si le fichier est volumineux, vous perdez beaucoup de temps. Peut-être que Ctrl+zdéplacer le fichier temporaire (commencer par un point) puis Ctrl-Crsync pourrait être une meilleure solution.
malat
Merci pour cette explication détaillée. Pour clarifier: ctrl + z pour mettre en pause, fg pour reprendre, bg pour arrêter.
Praesagus
3
@Praesagus bgde processus mis aux b ack g ronde , sans arrêt.
Jari Keinänen
--partialC'est ce dont j'avais besoin. J'essaie de copier 21 Go de données, et parmi celles-ci, j'ai un fichier de 6,6 Go. Le problème est que le réseau tue ma connexion après quelques Go de transfert de données, ce qui --partialest exactement ce dont j'ai besoin.
AnthonyD973
20

Ctrl+ Zsuspendre, et:

$ fg

pour continuer, utilisez

$ jobs

voir les travaux suspendus; bg [number]pour les arrière-plan; fg [number]pour le mettre en avant.

gauteh
la source
2
Ctrl+Ssuspend uniquement le défilement de la sortie, pas le programme sous-jacent (sauf s’il est bloqué en attendant que le terminal accepte sa sortie), et uniquement si vous ne l’avez pas désactivé.
Gilles 'SO- arrête d'être méchant'
1
Avec le statut «S» actuel, il ne reprend pas. Est-il prudent de le tuer avec Ctrl + C et de relancer rsync? Quelles autres options ai-je? J'aurai cela à l'esprit la prochaine fois, merci.
Juin
1
Notez également que Ctrl-Z pour suspendre un processus est susceptible, après un certain temps, d'entraîner la temporisation de toutes les connexions réseau TCP établies par ce programme. Ainsi, si un rsync est suspendu pendant plus de quelques minutes, il est très probable qu'il se ferme brusquement avec un message d'erreur lorsque vous le remettez au premier plan et qu'il constate que ses sockets ouverts renvoient des erreurs de lecture et d'écriture.
Jim Dennis
8

Courez rsyncavec le --partialdrapeau. Il conservera ensuite les transferts partiels et reprendra les fichiers partiels au démarrage.

bahamat
la source
5

Les gens ici ont mentionné utiliser les --partialtravaux de drapeau, il faut le mentionner, mais cela ne reprend que lorsque le drapeau --appendou --append-verifyest utilisé lors de la reprise.

--partialcrée un fichier caché du fichier qui n'a pas terminé le processus de synchronisation, le fichier est conservé lorsque vous interrompez la synchronisation. Il continue à terminer le fichier lorsque vous utilisez --appendaprès la reprise, sinon --append, le fichier caché incomplet est conservé et reste incomplet.

Conclusion: Vous pouvez simplement interrompre rsync --partialavec Ctrl+ Csi vous utilisez rsync --appendlors de la reprise

(Source: rsync peut-il reprendre après une interruption? Récupéré le 5 avril 2016)

Mehdi Nellen
la source
donc si j'ai utilisé rsync --avP <source> <destination>, je dois le mettre en pause avec CTRL + C, puis le reprendre simplement en tapant rysnc --append?
Kingmakerking
@kingmakerking yes
Mehdi Nellen Le
@kingmakerking: Non, vous avez toujours besoin des options de votre premier rsync, ainsi que de la source et de la destination. Pour reprendre, vous redémarrez votre commande rsync précédente et ajoutez --append les options existantes.
mardi