GNU/Linux >> Tutoriels Linux >  >> Linux

Reptyr - Déplacer un processus en cours d'exécution d'un terminal à un autre sans le fermer

Disons que vous exécutez un processus sur un serveur distant via une session SSH à partir de votre système local. Vous ne saviez pas que la tâche à distance prendrait beaucoup de temps. Vous souhaitez simplement laisser le travail en cours d'exécution sur le serveur distant lui-même et fermer la session SSH sans mettre fin au travail distant, puis le rattacher à la session SSH plus tard ou le lendemain. Bien sûr, vous pouvez démarrer le travail dans screen/tmux session, et détachez-vous de la session écran sans quitter le travail à distance, et quittez la session SSH. Mais si vous avez oublié de démarrer la session d'écran en premier lieu, il n'y a aucun moyen de vous rattacher au processus en cours ultérieurement. Une fois que vous avez fermé la session SSH, les processus en cours d'exécution seront également fermés sur le système distant. Alors, que ferez-vous dans de tels cas ? Aucun problème. C'est ici que Reptyr la commande vient en aide.

Reptyr est un outil en ligne de commande pour déplacer les processus en cours d'exécution entre ptys. Démarrez simplement un processus qui prend beaucoup de temps à se terminer sur votre système distant via une session SSH à partir de votre ordinateur de bureau ou portable local, et fermez la session SSH, rentrez chez vous et rattachez le processus en cours d'exécution le lendemain. En outre, vous pouvez facilement migrer/déplacer instantanément un processus de longue durée d'un terminal à un autre sans avoir à le terminer. Cela vous semble utile ? Bien sûr, ça l'est !

Télécharger - Ebook gratuit :"6 outils de ligne de commande Linux utiles pour les administrateurs système"

Ce bref tutoriel décrit comment déplacer un processus en cours d'exécution vers un nouveau terminal à l'aide de la commande Reptyr.

Installez Reptyr sur vos systèmes distants

Remarque :  Votre système distant doit avoir tmux ou écran installé afin de déplacer le processus en cours d'exécution.

Dans Arch Linux et ses dérivés, exécutez :

$ sudo pacman -S reptyr

Dans les systèmes basés sur DEB, exécutez la commande suivante pour installer Reptyr :

$ sudo apt-get install reptyr

Pour installer screen ou tmux, exécutez :

$ sudo apt-get install tmux screen

Sur RHEL / CentOS / Scieintific Linux / Fedora, reptyr n'est pas disponible dans les dépôts. Ainsi, vous pouvez le compiler et l'installer comme indiqué ci-dessous.

Installez les prérequis suivants :

$ sudo yum install git tmux screen
$ sudo yum groupinstall 'development tools'

Git clone reptyr repository avec la commande en tant qu'utilisateur root :

$ git clone https://github.com/nelhage/reptyr.git

Allez dans le répertoire reptyr :

$ cd reptyr/

Exécutez les commandes suivantes pour le compiler et l'installer.

$ make
$ sudo make install

J'ai compilé et installé Reptyr à partir de la source dans l'édition serveur CentOS 7 64 bits, et cela a plutôt bien fonctionné comme décrit ci-dessus.

Déplacer un processus en cours d'exécution d'un terminal à un autre sans le fermer à l'aide de Reptyr

Habituellement, nous nous connectons au serveur distant à partir de n'importe quel système local via SSH, comme indiqué ci-dessous.

# ssh [email protected]_Of_remote_system

Après vous être connecté au système distant, démarrez un long processus. Par exemple, je vais télécharger l'ISO de bureau Ubuntu 16.04 en utilisant wget commande.

# wget http://cdimage.ubuntu.com/daily-live/current/xenial-desktop-amd64.iso

Exemple de sortie :

Comme vous le voyez dans la capture d'écran ci-dessus, la taille totale du téléchargement est de 1,5 Go et cela prendra plus de 90 minutes.

Je ne veux pas attendre plus longtemps, et je ne veux pas non plus quitter le travail à distance.

Donc, ce que je vais faire, c'est démarrer un écran ou tmux session dans un nouveau terminal, utilisez reptyr utilitaire pour saisir le processus en cours d'exécution à l'intérieur de l'écran ou de la session tmux. Enfin, je mettrai fin aux deux sessions ssh et me rattacherai au processus en cours quand je le souhaite.

Ouvrons une nouvelle fenêtre de terminal ou un nouvel onglet, et démarrons une session screen ou tmux en tapant screen ou tmux dans l'aérogare :

# screen

ou

# tmux

Comme vous le voyez dans la capture d'écran ci-dessus, la session d'écran a été démarrée et elle est en cours d'exécution.

Maintenant, trouvons les processus en cours d'exécution depuis le nouveau Terminal en utilisant la commande suivante :

# ps -a

Exemple de sortie :

 PID TTY TIME CMD
 2320 pts/0 00:00:11 wget
 2343 pts/1 00:00:00 screen
 2358 pts/2 00:00:00 ps

Notez le PID pour le wget processus et joignez le processus en cours d'exécution à l'intérieur de la session d'écran à l'aide de la commande :

# reptyr 2320

Terminé ! Comme vous le voyez dans la capture d'écran ci-dessus, le processus wget a été déplacé (migré) de l'ancien terminal vers la nouvelle fenêtre du terminal (celle qui s'exécute avec la session d'écran).

Une fois que vous avez déplacé le processus en cours d'exécution depuis le terminal d'origine, il sera immédiatement fermé et commencera à continuer là où nous l'avons laissé dans le nouveau terminal.

Maintenant, vous pouvez détacher ou fermer le terminal en toute sécurité et le travail continuera à s'exécuter sur votre serveur distant.

Pour vous détacher de l'écran ou de la session tmux, appuyez sur CTRL+A+D .

Après vous être détaché de la session d'écran, le message suivant apparaîtra.

[detached from 2344.pts-1.server1]

Pour rattacher le processus en cours d'exécution, SSH à votre système distant :

# ssh [email protected]

Ici. 192.168.1.150 est l'adresse IP de mon serveur distant.

Et exécutez ce qui suit si vous utilisez une session écran :

# screen -Dr

Pour la session tmux, exécutez :

# tmux attach

Voila ! Le processus en cours d'exécution a été rattaché à nouveau et vous y verrez que le processus est toujours en cours d'exécution.

Comme vous le voyez dans la capture d'écran ci-dessus, le travail wget n'est pas interrompu ou terminé, et est toujours en cours d'exécution. Il continuera à fonctionner tant que votre système distant sera opérationnel.

Résumé

Pour résumer, Reptyr est un outil très très important et utile pour les administrateurs système Linux de tout niveau. Au cas où vous en auriez marre d'un processus qui a pris beaucoup de temps, Reptyr vous sera certainement utile. Ouvrez simplement une nouvelle fenêtre de terminal, connectez SSH à votre serveur distant, recherchez l'ID des processus en cours d'exécution, déplacez-les en toute sécurité dans les sessions screen ou tmux et quittez la session SSH. Pour plus de détails, consultez les liens joints à la fin de ce didacticiel.

Suggestion de lecture :

  • Démarrage automatique de la session Tmux sur le système distant lors de la connexion via SSH
  • Comment afficher les informations de processus à l'aide de Procs sous Linux
  • Tmate - Partagez votre terminal instantanément avec n'importe qui, où que vous soyez
  • Comment modifier le type et la taille de la police de la console Linux
  • Comment verrouiller les sessions de la console virtuelle sous Linux
  • Comment basculer entre les TTY sans utiliser les touches de fonction sous Linux

C'est tout pour le moment. Eh bien, je vous laisse vous familiariser avec cet outil utile. Essayez-le et vous ne serez pas déçu.

Liens de référence :

  • Reptyr GitHub
  • Guide Reptyr

Linux
  1. Linux - Déplacer un volume logique d'un groupe de volumes à un autre ?

  2. Comment afficher la sortie d'un processus en cours d'exécution dans une autre session Bash ?

  3. Comment copier les paramètres d'une machine à une autre ?

  4. Copier les dernières N-lignes d'un fichier à un autre ?

  5. déplacer un compte de messagerie d'un serveur cPanel à un autre

Reptyr - Déplacer un processus en cours d'exécution d'un terminal à un autre sans le fermer

Comment déplacer des comptes d'un serveur cPanel vers un autre serveur cPanel ?

Existe-t-il un moyen simple de déplacer/copier un volume logique d'un groupe de volumes à un autre ? (LVM2)

Quel est le moyen le plus rapide de déplacer un million d'images d'un répertoire à un autre sous Linux ?

Déplacer un volume logique d'un groupe de volumes à un autre

Lien symbolique d'un poste de travail à un autre sans montage