Disons que vous accédez à distance à un autre système via SSH. Vous souhaitez exécuter une commande qui prend beaucoup de temps à se terminer, puis quitter la session SSH, mais laisser la commande en cours d'exécution même si vous n'êtes plus connecté au système distant. Comment tu fais ça? Comme vous le savez peut-être, une fois que vous quittez le SSH, toutes les tâches en cours d'exécution seront terminées. Souhaitez-vous commencer le travail depuis le début ? Vous n'êtes pas obligé. Ici, j'ai donné 4 méthodes pour maintenir une commande en cours d'exécution après la déconnexion de la session ssh. Continuez à lire.
Conserver une commande en cours d'exécution après la déconnexion de la session SSH sous Linux
Il pourrait y avoir plusieurs façons de le faire. Cependant, je trouve que les méthodes suivantes sont simples et directes.
Méthode 1 - Utiliser l'écran
L'écran tool, un gestionnaire de fenêtres plein écran avec émulation de terminal VT100/ANSI, vous permet de vous détacher en toute sécurité de la session SSH sans quitter le travail à distance. Il sera utile pour ceux qui travaillent avec plusieurs serveurs distants. La commande Screen est préinstallée dans la plupart des systèmes d'exploitation Linux. Au cas où, s'il n'est pas installé, vous pouvez l'installer à l'aide du gestionnaire de packages de votre distribution.
Sur Arch Linux et dérivés :
$ sudo pacman -S screen
Sur RHEL, CentOS et d'autres systèmes basés sur RPM :
$ sudo yum install screen
Sur Debian, Ubuntu et d'autres systèmes basés sur DEB :
$ sudo apt-get install screen
Sur SUSE/OpenSUSE :
$ sudo zypper install screen
Après avoir installé screen sur vos systèmes distants, démarrez la session screen :
$ screen
La session d'écran a maintenant démarré. Maintenant, exécutez le travail ou la tâche que vous vouliez faire sur votre système distant.
Je vais télécharger l'image Ubuntu 16.04 :
$ wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso
Ubuntu 16.04 ISO a une taille d'environ 1,5 Go. Il faudra près d'une heure pour télécharger dans une connexion haut débit normale. Vous n'avez pas à attendre aussi longtemps. Laissez simplement le processus de téléchargement en cours d'exécution sur le système distant et quittez la session d'écran en appuyant sur "Ctrl-A" suivi de "d" . Vous verrez une sortie comme ci-dessous.
[detached from 1365.pts-0.server]
Après vous être déconnecté de la session d'écran, vous pouvez vous déconnecter du système distant. La tâche distante continuera de s'exécuter sur le serveur.
Vous pouvez vous reconnecter à la session d'écran à tout moment à l'aide de la commande :
$ screen -r
Vous verrez que le processus est toujours en cours d'exécution.
Si vous avez plus d'une session d'écran, vous devez saisir l'ID de la session d'écran afin de vous y rattacher. Pour afficher le nombre de sessions d'écran, exécutez :
$ screen -ls
Exemple de sortie :
There are screens on:There are screens on: 1382.pts-0.server (Saturday 15 July 2017 04:39:51 IST) (Detached) 1365.pts-0.server (Saturday 15 July 2017 04:38:44 IST) (Detached) 2 Sockets in /var/run/screen/S-sk.
Maintenant, rattachez-vous à la session d'écran souhaitée, dites 1382 , exécutez :
$ screen -r 1382
Pour plus de détails, consultez les pages de manuel.
$ man screenTéléchargement recommandé - Cheat Sheet gratuit :"Linux Command Line Cheat Sheet"
Méthode 2 - Utilisation de tmux
Le tmux est un multiplexeur de terminaux qui permet de créer, d'accéder et de contrôler plusieurs terminaux à partir d'un seul écran. Une session tmux peut être détachée d'un écran et continuer à s'exécuter en arrière-plan, puis être rattachée ultérieurement. Comme l'outil Screen, vous pouvez également utiliser tmux pour vous détacher d'une session SSH sans quitter les tâches distantes. La commande Tmux est préinstallée sur la plupart des systèmes d'exploitation Linux. Au cas où, s'il n'est pas installé, vous pouvez l'installer à l'aide du gestionnaire de packages de votre distribution.
Sur Arch Linux et dérivés :
$ sudo pacman -S tmux
Sur RHEL, CentOS et d'autres systèmes basés sur RPM :
$ sudo yum install tmux
Sur Debian, Ubuntu et d'autres systèmes basés sur DEB :
$ sudo apt-get install tmux
Sur SUSE/OpenSUSE :
$ sudo zypper install tmux
Après avoir installé tmux, démarrez la session tmux à l'aide de la commande :
$ tmux
Maintenant, commencez votre tâche ou votre travail. Ensuite, détachez-vous en toute sécurité de la session tmux sans quitter les tâches distantes en appuyant sur "CTRL-b" suivi de "d" . Cela détachera votre session tmux mais vous laissera faire dans cette session en arrière-plan. Cela signifie que toutes les télécommandes fonctionneront même si vous êtes déconnecté de la session.
Pour répertorier les sessions disponibles, exécutez :
$ tmux ls 0: 1 windows (created Sat Jul 15 16:51:35 2017) [134x33] 1: 1 windows (created Sat Jul 15 16:53:58 2017) [134x33]
Vous pouvez vous rattacher à la session tmux à l'aide de l'ID de session respectif, comme indiqué ci-dessous :
$ tmux attach -t 0
Pour plus de détails, consultez les pages de manuel.
$ man tmux
Méthode 3 - Utiliser Reptyr
Que faire si vous avez oublié de démarrer les commandes dans screen/tmux en premier lieu ? Pas de soucis. C'est ici que Reptyr vient en aide. Reptyr vous aide à déplacer les processus en cours d'exécution entre les ptys. Nous avons déjà publié un guide détaillé sur Reptyr. Consultez le lien suivant.
- Reptyr – Déplacer un processus en cours d'exécution d'un terminal à un autre sans le fermer
Méthode 4 - Utiliser nohup
non hop , signifie Non h angvers le haut , est un autre utilitaire de ligne de commande pour vous aider à exécuter des commandes Linux même après avoir été déconnecté des sessions SSH. Comme il fait partie de GNU coreutils, vous n'avez pas besoin de l'installer. Il est préinstallé dans toutes les distributions Linux.
L'utilisation est absolument facile. Après vous être connecté à votre système distant, il vous suffit de :
$ nohup <command> &
Oui, c'est aussi simple que cela.
Exemple :
$ nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
Maintenant, vous pouvez quitter la session SSH. Le travail à distance continuera de s'exécuter.
Connectez-vous au système distant et exécutez ce qui suit pour afficher la liste des tâches en cours d'exécution.
$ jobs -l [1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
Par défaut, les sorties seront ajoutées à 'nohup.out'. Vous pouvez, bien sûr, modifier le fichier de sortie.
Voici un autre exemple.
$ nohup find -size +10M > log.txt &
La commande ci-dessus trouvera les fichiers dont la taille est supérieure à 10 Mo et écrit la sortie dans le fichier log.txt.
Pour plus de détails, reportez-vous aux pages de manuel.
$ man nohup
Et c'est tout pour le moment les amis. Vous avez quelque chose en tête ? N'hésitez pas à me le faire savoir dans la section des commentaires ci-dessous. Plus de bonnes choses à venir. Continuez à visiter !
Santé !