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
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 unscreen
, utilisezreptyr
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èmeptrace(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 faisantecho 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
où PID
est le PID du processus que vous voulez attacher à un nouveau terminal.
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.
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.