Avoir un travail rsync terminé après la fermeture de la connexion SSH

13

Je transfère une grande quantité de fichiers d'un ordinateur à un autre en utilisant rsync. Je fais cela en SSHing dans l'ordinateur source et en exécutant une commande comme celle-ci:

sudo rsync ssh --rsync-path="sudo rsync" source_dir [email protected]:dest_dir.

Même si j'ajoute nohupavant cette commande, chaque fois que je ferme la fenêtre de terminal à partir de laquelle j'ai SSHé, la connexion se ferme.

Comment puis-je l'avoir pour que mon transfert de fichiers se poursuive lorsque je ferme ma connexion SSH?

jaynp
la source

Réponses:

16

La raison pour laquelle nohupne vous aide pas est parce que le programme fonctionne avec des fichiers IO standard.

Voici 'un extrait de la page Wiki pour nohup:

Remarque - Les travaux en arrière-plan sans interruption sont généralement utilisés pour éviter de les interrompre lors de la déconnexion d'une session SSH distante. Un problème différent qui se pose souvent dans cette situation est que ssh refuse de se déconnecter ("se bloque"), car il refuse de perdre toutes les données de / vers les tâches d'arrière-plan. Ce problème peut également être résolu en redirigeant les trois flux d'E / S:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &Notez également qu'une session SSH de fermeture n'envoie pas toujours un signal HUP aux processus dépendants. Cela dépend, entre autres, si un pseudo-terminal a été alloué ou non.

Vous pouvez l'utiliser screenpour cela.

Créez simplement une session écran avec: screen -S rsync ensuite, vous détachez votre écran avec CTRL+A d

Et vous pouvez vous déconnecter de SSH

Bakytn
la source
4
Je veux ajouter que lorsque vous effectuez un travail qui sera interrompu, par exemple par une connexion perdue, sera problématique, puis exécutez-le dans une session d'écran. L'écran est conçu pour protéger contre la perte accidentelle de connexion. Vous pouvez vous connecter à distance, démarrer l'écran, démarrer votre travail et si vous perdez la connexion, vous pouvez vous reconnecter à n'importe quelle instance d'écran en cours d'exécution. L'écran possède d'autres fonctionnalités utiles - la capture de la session dans un fichier journal, la présence de plusieurs «écrans» dans une seule session (économie de la surcharge du réseau) et de plusieurs visualiseurs (style Classroom). Il convient également de mentionner que tmux est une alternative d'écran.
Johan
6

Cette commande d'écran est très bien, mais n'a pas fonctionné exactement pour mes besoins.

Cela a beaucoup mieux fonctionné:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &
Ligemer
la source
travaillé pour moi, tout comme la réponse acceptée, merci
Salaros