web-dev-qa-db-fra.com

Comment détacher une session ssh sans tuer un processus en cours?

J'ai commencé un redimensionnement du système de fichiers test sur un serveur via ssh, mais j'ai totalement oublié de le faire sur une session screen. Maintenant, il fonctionne et mon ordinateur portable a un accès Internet très lent. Est-il possible de le faire fonctionner si je perds la connexion ssh?

Il en résulte également des progrès, mais je n'ai pas à m'en soucier.

OS: équivalent RHEL7.2 (SL7).

Il est probablement préférable de lier ceci comme solution: https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-Nohup

je ne sais pas comment lier cela au lieu de celui suggéré, alors n'hésitez pas à l'ajouter et à le marquer en double

4
xcorat

C'est exactement le cas man 1 reptyr mentionne explicitement:

reptyr est un utilitaire permettant de reprendre un programme en cours d'exécution et de le connecter à un nouveau terminal. Vous avez démarré un processus de longue haleine sur ssh, mais vous devez partir et vous ne voulez pas l'interrompre? Commencez juste un screen, utilisez reptyr pour le récupérer, puis tuez la session ssh et rendez-vous à la maison.

Ne manquez pas cette note:

reptyr dépend de l'appel système ptrace(2) à associer au programme distant. Sur Ubuntu Maverick et supérieur, cette capacité est désactivée par défaut pour des raisons de sécurité. Vous pouvez l'activer temporairement en faisant

echo 0 > /proc/sys/kernel/yama/ptrace_scope

en tant que root, ou de manière permanente en modifiant le fichier /etc/sysctl.d/10-ptrace.conf, qui contient également des informations supplémentaires sur ce paramètre.

Notez également que reptyr attache uniquement un processus à un autre terminal. Cela ne signifie pas que le processus devient un enfant du nouveau Shell.

L'utilisation de base est simple:

reptyr PID

PID est le PID du processus que vous voulez attacher à un nouveau terminal.

4
Kamil Maciorowski

Utilisation

Ctrl-Z

pour suspendre l'application et revenir à la ligne de commande. Puis utiliser

bg

pour permettre au processus de continuer en arrière-plan. Enfin utiliser

disown

Pour que le processus ne soit pas fermé lorsque vous déconnectez votre session et fermez votre terminal.

Le processus continuera à s'exécuter, mais il n'y a aucun moyen de "rattacher" le terminal pour afficher le résultat dont je suis conscient si vous vous reconnectez à une nouvelle session.

4
apocalysque

Vous pouvez totalement dissocier une commande (dans bash ou zsh, éventuellement d'autres shells) avec la commande disown. Cependant, la commande peut ne pas être satisfaite si elle nécessite un terminal, auquel cas voir la réponse reptyr.

$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+  Stopped                 sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$ 

Une autre option consiste à démarrer automatiquement une session écran (ou tmux) afin de ne pas oublier d'en démarrer une, car une session a déjà été lancée pour vous, car vous avez configuré les choses de cette façon. Il y a d'autres billets ailleurs sur la façon de faire cela.

2
thrig
  • sSH dans votre boîte à distance. tapez screen Ensuite, démarrez le processus souhaité.
  • Appuyez sur Ctrl-A puis Ctrl-D. Cela détachera votre session d'écran mais laissera vos processus en cours d'exécution. Vous pouvez maintenant vous déconnecter de la boîte distante.
  • Si vous souhaitez revenir plus tard, reconnectez-vous et tapez screen -r Ceci reprendra votre session screen et vous pourrez voir la sortie de votre processus.

src

0
Badr Bellaj