Transférer la commande actuelle vers une session détachable (tmux / screen)

41

J'exécute actuellement une sauvegarde et elle doit maintenant être transférée vers une sauvegarde amovible comme sur tmuxou screen. Existe-t-il un moyen de le faire lorsque la commande est en cours d'exécution?

Je peux envoyer la commande en arrière-plan en appuyant sur Ctrl+ Zet la remettre en place en émettant une fgcommande. mais je ne sais pas si cette session peut revenir en arrière lorsque je quitte le terminal.

Jürgen Paul
la source
1
Il n'y a aucun moyen de le faire. Vous devez démarrer la commande à partir d'une session écran (ou autre) pour qu'elle soit détachable.
Dan D.

Réponses:

45

Cela fonctionne, la plupart du temps:

Prérequis: avoir reptyret tmux/ screeninstallé; vous pourrez les retrouver avec apt-getou yum, selon votre plateforme.

  1. Utilisez Ctrl+ Zpour suspendre le processus.

  2. Reprenez le processus en arrière-plan avec bg

  3. Recherchez l'ID de processus du processus d'arrière-plan avec jobs -l

    Vous verrez quelque chose de similaire à ceci:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. Désactivez le travail du parent actuel (shell) avec disown yourprocessname

  5. Démarrer tmux(préféré) ou screen.

  6. Rattachez le processus à la tmux/ screensession avec reptyr:

    reptyr 11475
    
  7. Vous pouvez maintenant détacher le multiplexeur (par défaut Ctrl+ B, Dpour tmuxou Ctrl+ A, Dpour screen) et déconnecter SSH pendant que votre processus se poursuit dans tmux/ screen.

  8. Plus tard, lorsque vous vous connectez à nouveau avec SSH, vous pouvez ensuite vous connecter à votre multiplexeur (par exemple tmux attach).

Ville
la source
2
Malheureusement, après avoir couru, sudo reptyr 1430j'ai toujours eu: "... [-] Impossible d'ouvrir le tty chez l'enfant. Impossible de joindre au pid 1430: Autorisation refusée"
Daryl Spitzer
3
Vous pouvez trouver un certain succès avec l'option -L, par exemple reptyr -L 1430 dans votre cas.
cgseller
1
Exécutez cela si nécessaire:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao
il est également sur Arch via yo: archlinux.org/packages/community/i686/reptyr (pas apt-get ou miam)
Tommy
1
Après bg, le processus devrait être exécuté en arrière-plan, donc jobsdevrait dire Runningplutôt que Stopped.
G-Man dit «Réinstalle Monica»
2

reptyr est bon mais j'ai une erreur de permission

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

Puis trouvé
-L Like '-l', but also redirect the child's stdio to the slave.

qui fonctionnait comme un charme

$ reptyr -L 30622
Opened a new pty: /dev/pts/4
fifi finance
la source
2
Quand j'ai ajouté le, -Lj'ai reçu un message comme le vôtre, Opened a new pty: /dev/pts/6mais ma suspension topn'apparaissait pas dans le tmux. Qu'est-ce que j'oublie ici?
Mehrad Mahmoudian
-1

vous pouvez utiliser disown pour détacher le travail de son terminal, si cette commande est disponible.

il est plus sûr de l'exécuter avec nohup pour commencer.

johnshen64
la source
Pouvez-vous développer davantage sur ce sujet? Que voulez-vous dire pour commencer nohup? Comment fonctionne disowningun processus?
Dark Android
disown détache le processus d'arrière-plan (que vous mettez en arrière-plan avec control-z) du terminal afin que le processus se poursuive après la disparition du terminal. vous pouvez simplement taper disown après control-z, si la commande est trouvée. cependant, cela est en théorie et peut ne pas fonctionner de manière fiable. la prochaine fois, il est plus sûr d'ajouter nohup à l'avant de votre programme afin que vous puissiez quitter le terminal en toute sécurité.
johnshen64
J'ai trouvé que «renier» n'était pas assez fiable, comme mentionné. nohup n'est pas vraiment mieux. reptyr pourrait cependant être une solution. github.com/nelhage/reptyr
anastrophe
Cela ne répond pas à la question. La question n'est pas seulement "comment fermer le terminal sans tuer la sauvegarde", mais "comment le reprendre plus tard". Pour lequel la bonne réponse est "vous ne pouvez pas".
Gabe
Je vois un désaccord sémantique possible ici, et c'est un résultat de recherche assez populaire pour des mots clés comme 'relocatable', 'indépendant de la position', 'detach tmux', etc. donc j'espère que vous pouvez pardonner le necro-post. Vouliez-vous dire "vous ne pouvez pas" en raison d'un mappage de mémoire différent entre l'arrêt du programme et sa reprise? Un programme de sauvegarde va seulement savoir quels fichiers sauvegarder par la structure de fichiers qui lui est donnée, et la structure de fichiers existe pour rendre cette mémoire physique mappable à l'avenir. (Nous sauvegardons pour l'occasion que ce n'est pas le cas!)
John P