nohup et scp, comment détacher un processus du terminal

Aller, un petit billet pour vous parler des commandes nohup et scp et donner une solution à un problème que j’ai rencontré.

Il m’arrive souvent de vouloir transférer des fichiers volumineux d’un serveur à un autre et qui ne se trouvent pas sur le même réseau, plusieurs solutions existent, mais je parlerai ici de la commande SCP.
En résumé, le SCP (Secure Copy Protocol) permet de transférer en toute sécurité des fichiers entre deux machines via le protocole sécurisé SSH.

Le souci c’est que plus les fichiers sont lourds, plus le temps de transfert augmente, et si vous avez une connexion merdique, comme c’est mon cas, le temps d’attente s’allonge considérablement, et pendant ce temps vous ne pouvez pas fermer le terminal ou éteindre la machine, car le processus du scp et lié à celui du shell qui l’a lancé.

nohup et scp

Vous allez me dire, rien de plus simple, la commande nohup permet justement de détacher le processus fils du processus père.
Ok, nous pouvons utiliser la commande nohup dans ce cas de figure, mais pas en utilisation standard, car la scp demande un mot de passe.

Pour plus de clarté voici un exemple concret

Imaginons que j’ai un fichier nommé “MonFichierTresLourd” que je veux transférer à un serveur “zenzla@chezmoi” et plus exactement dans le répertoire “/media/fichier”

En temps normal, j’utilise la commande scp seule

1
2
scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier
zenzla@chezmoi password:

Ici, il me demande le mot de passe pour me connecter au serveur distant qui est zenzla@chezmoi

Maintenant, si j’utilise la commande scp avec une utilisation standard de nohup

1
nohup scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier

Dans ce cas, je n’aurais pas la main pour saisir le mot de passe :(, même en arrêtant le processus avec Ctrl+z

La solution est donc de jouer avec les redirections des flux comme le démontre la commande si dessous

1
2
3
4
5
6
nohup scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier > nohup.out 2>&1
zenzla@chezmoi password: <--- Saisir le mot de passe

Ctrl+z
.......
bg

Explication
Nous redirigeons la sortie standard (1) vers le fichier nohup.out ainsi que la sortie des erreurs (2), cela vas nous permettre de saisir le mot de passe demandé,
mais le terminal n’est toujours pas libre, il faut donc arrêter (non le tuer) le processus en faisant un Ctrl+z puis le mettre en arrière-plan (background) en saisissant bg

Voilà votre terminal est libre !!
Pour vous assurer que la copie des fichiers tourne bien en arrière plan, utilisez la commande jobs

Vous pouvez maintenant éteindre votre machine et rentrer chez vous grâce à nohup et scp

Zenzla

À propos de Zenzla

Je suis un passionné des logiciels libres, et tous ce qui tourne autour!! j'essaie de plus en plus de me débarrasser de l'oppression des Big Brothers du net. Je suis aussi Formateur en base de donnée, Gnu/Linux et bien autre chose.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *