web-dev-qa-db-fra.com

Comment récupérer un shell après une déconnexion

Je fais du travail sur une machine distante CentOS 5.6 et mon réseau continue de tomber. Existe-t-il un moyen de récupérer mes sessions bloquées après ma reconnexion?

EDIT: je fais une mise à jour et une installation avec yum et je crains que cela ne soit un problème si les processus continuent de se bloquer au milieu de ce qu'ils font.

44
sergio

Il n'y a aucun moyen, mais pour éviter cela, j'aime utiliser tmux. Je lance tmux, démarre l'opération et continue mon chemin. Si je reviens et que la connexion est rompue, tout ce que j'ai à faire est de me reconnecter et de taper tmux attach.

Voici un exemple.

$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0
Back in the tmux sesion
69
cnicutar

Les recommandations pour tmux et screen sont toutes deux de bonnes suggestions. Ils impliquent la réponse à votre question, mais ne l'énoncent pas réellement. La réponse à la question est: il n'y a aucun moyen. Si vous vous connectez via ssh, le shell se termine lorsque la connexion est interrompue. La solution consiste à se connecter et à démarrer immédiatement un terminal virtuel quelconque (tel que tmux). Lorsque la connexion est interrompue, le shell dans lequel vous vous trouvez est terminé, mais vous pouvez ouvrir un nouveau shell et vous reconnecter au terminal virtuel (qui exécute le shell dans lequel vous effectuez réellement votre travail).

37
William Pursell

Comme William l'a dit, la réponse courte est non, il n'y a aucun moyen. Pour éviter cela, vous pouvez utiliser la commande d'écran avant de perdre la connexion

8
Nicholas Smith

Quelqu'un a ajouté reptyr dans un commentaire plutôt qu'une réponse, donc je ne peux pas le voter, mais cela semble une bonne réponse à la question modifiée et a très bien fonctionné sur CentOS.

voir: https://github.com/nelhage/reptyrhttps://www.ostechnix.com/reptyr-move-running-process-new-terminal/

Existe-t-il un moyen de récupérer mes sessions bloquées après ma reconnexion?

EDIT: je fais une mise à jour et une installation avec yum et je crains que cela ne soit un problème si les processus restent suspendus au milieu de ce qu'ils font.

Donc, même chose, j'ai perdu la connexion à distance à une session de mise à jour miam. J'ai donc cherché et trouvé cette question ... puis reconnecté et utilisé l'écran cette fois:

  1. reconnecter ssh
  2. écran
  3. installez reptyr selon les liens ci-dessus
  4. ps -a | grep miam
  5. reptyr psid

et je suis là à l'invite récupérée que miam donnait quelques heures plus tôt.

Techniquement, les réponses sont toutes correctes, ce n'est PAS une récupération d'une session bloquée, c'est la reparentation d'un processus orphelin à la session en cours. Et très utile c'est aussi ...

3
ingleno

Non, vous ne pouvez pas récupérer un Shell après une déconnexion. Au lieu de cela, vous pouvez vous assurer que la commande que vous exécutiez continue de s'exécuter après la déconnexion.

Pour ce faire, utilisez les commandes "Nohup" et "disown", qui sont généralement des commandes intégrées sur la plupart des shells, c'est-à-dire que vous n'avez pas besoin d'installer quoi que ce soit. Cela ne fonctionne que pour les commandes non interactives.

Ainsi, les étapes seraient les suivantes:

  1. Se connecter au serveur
  2. Exécutez votre commande: "Nohup Sudo yum update &" (cela enregistrera également toutes les sorties dans le fichier Nohup.out dans votre répertoire actuel)
  3. Exécutez "désavouer% 1"
  4. N'hésitez pas à vous déconnecter à ce stade ou attendez d'être déconnecté :)

Lorsque vous revenez sur le serveur, il suffit de "tail Nohup.out" pour voir comment la commande fonctionne.

3
zygis

Comme beaucoup de gens ont suggéré screen et tmux, ils supportent tous les deux des fonctionnalités de base, mais ont des caractéristiques spécifiques distinctes, donc on ne peut pas dire que l'un est supérieur à l'autre dans tous les cas. Par exemple, seul tmux prend en charge Fractionnement de fenêtre , tandis que seul l'écran GNU peut basculer retour à la ligne avec (Ctrl + ar). Voir comparaison plus détaillée ici .

Il existe également des outils spécifiquement pour résoudre ce problème de ssh:

Autossh est un programme pour démarrer une copie de ssh et la surveiller, en la redémarrant si nécessaire en cas de mort ou d'arrêt du trafic. L'idée vient de rstunnel.

Mosh est une application de terminal distant qui permet l'itinérance, prend en charge la connectivité intermittente et fournit un écho local intelligent et une modification de ligne des frappes de l'utilisateur. Mosh est un remplacement pour SSH. Il est plus robuste et réactif, en particulier sur les liaisons Wi-Fi, cellulaires et longue distance.

1
Yaroslav Nikitenko