886 votes

Comment maintenir les processus en cours après la fin de la session ssh ?

Disons que je lance un ensemble de processus à partir d'une session ssh. Est-il possible de mettre fin à la session ssh tout en maintenant ces processus en cours d'exécution sur la machine distante ?

3 votes

28voto

SiddharthaRT Points 5976

Il existe deux programmes principaux que vous pouvez utiliser pour maintenir les programmes et l'état du terminal sur plusieurs connexions ssh. Il s'agit de screen (le titulaire, mais malheureusement non maintenu. Apparemment, en cours de développement actif actuellement ) et tmux (plus récent, activement maintenu). Byobu est un frontal qui peut fonctionner au-dessus de chacun de ces systèmes et offrir des informations supplémentaires sur l'état d'ubuntu. Sur les nouvelles installations, il utilisera tmux comme backend, si vous avez une ancienne installation de byobu et une configuration existante, il maintiendra le backend précédent, que ce soit screen ou tmux.

Byobu

Byobu peut être installé sur l'ordinateur en le faisant dans une machine basée sur Debian :

sudo aptitude install byobu

En utilisant yum, vous faites

su -c 'yum install byobu'

Il est également possible d'installer byobu sur d'autres distributions.

Utilisation du byobu

Vous pouvez lancer byobu en exécutant byobu sur la machine hôte après s'être connecté en utilisant ssh. Cela vous donnera un Shell qui ressemble à ceci :

image-byobu

Vous pouvez également utiliser Byobu Terminal sur une machine Ubuntu avec l'option -X et avoir facilement un byobu parfaitement fonctionnel.

Utilisation :

Démarrez byobu en tapant byobu .

Vous pouvez appuyer sur F2 pour créer une nouvelle fenêtre dans la session en cours, F3-F4 pour basculer entre les différentes fenêtres.

La meilleure partie de byobu est que vous n'avez pas besoin de tuer les processus en cours d'exécution dans le terminal pour quitter le terminal. Vous pouvez simplement envoyer screen/tmux (le squelette de byobu) en arrière-plan et reprendre au prochain passage :

  • Pour quitter le byobu et le laisser fonctionner (détacher), appuyez sur F6.

  • La prochaine fois que tu viens, fais juste byobu et tu devrais être de retour là où tu étais.

    byobu-detach-attach

Vous pouvez également créer diverses sessions byobu en byobu -S session1 et ainsi de suite. Et vous pourrez vous connecter à l'un ou l'autre quand vous reviendrez.

Vous pouvez faire beaucoup plus en utilisant Byobu. Utilisez-le ! Voici quelques guides définitifs aquí ou aquí .

0 votes

J'ai essayé d'utiliser byobu à partir d'une session basée sur PuTTY vers ma boîte Ubuntu, mais j'obtiens la ligne d'état répétée et défilant sur l'écran. Bien qu'il se soit détaché correctement en appuyant sur F6, ce n'était pas une solution utilisable dans ma configuration.

1 votes

@jfmessier C'est parce que PuTTY ne prend pas bien les ncurses (utf-8 en gros). Il est possible d'éliminer ce problème en suivant ce fil de discussion. stackoverflow.com/questions/10731099/

0 votes

C'est génial ! 1. Il me donne une invite bash colorée que je ne peux pas activer avec bash comme mon Shell par défaut et 2. Je peux faire tourner 2 bots en même temps et toujours avoir un autre terminal sur lequel travailler ! @SiddharthaRT vous méritez un upvote monsieur !

20voto

Brett Veenstra Points 1447

Vous ne pouvez pas faire cela une fois que le processus a commencé, vous devez avoir configuré les choses avant d'exécuter un travail de longue durée.

Vous pouvez utiliser nohup mais la sagesse moderne suggère que vous utilisiez screen ou byobu comme login afin de pouvoir vous détacher et laisser les choses fonctionner.

L'écran présente l'avantage de pouvoir se détacher d'une machine et de se rattacher à une autre, ce qui est pratique si vous souhaitez vérifier les processus en cours depuis longtemps, au-delà de la fin de la journée de travail.

Il y a une mise en route raisonnable guide de l'écran ici.

byobu met une interface facile à utiliser en haut de l'écran avec des menus, etc. C'est aussi l'implémentation actuelle de screen sur les nouveaux ubuntu. F2 pour démarrer un nouveau terminal F3/F4 pour alterner entre les deux et F6 pour se déconnecter. Tapez exit pour fermer définitivement le terminal.

1 votes

Byobu utilise tmux ces jours-ci

17 votes

"Vous ne pouvez pas faire cela une fois que le processus a commencé, vous devez avoir configuré les choses avant d'exécuter un travail de longue durée". -- non, vous pouvez utiliser disown pour y parvenir. Voir la réponse de @bassgey

1 votes

Après avoir lutté pour apprendre screen et tmux....byobu m'a mis les larmes aux yeux

10voto

Pour un seul Shell ShellscriptShell que j'ai exécuté sur une longue période, je vais me connecter, et exécuter le processus en arrière-plan en utilisant '&'.

Exemple :

/path/to/my/script &

Je me suis déconnecté et j'ai déconnecté ma session SSH. Lorsque je me connecte quelque temps plus tard, le script est toujours en cours d'exécution, comme le prouve la collecte continue de données provenant du .

3 votes

Oui, j'aimerais savoir en quoi screen / tmux est meilleur que cette solution simple.

0 votes

Oui, je peux voir cela sur mon ubuntu aussi, mais cela ne devrait pas arriver en théorie. Je ne comprends pas pourquoi

1 votes

@MadsSkjern Parce que vous ne pouvez pas saisir de données dans le script en utilisant cette méthode.

8voto

Jorge Gutierrez Points 89

Hey, bien que je sois d'accord pour dire que l'écran est l'option la plus efficace. Vous pouvez utiliser vncserver et ensuite lancer le processus sur celui-ci.

Aussi, si votre seul intérêt est d'avoir le processus en cours d'exécution et de ne pas avoir besoin d'en reprendre le contrôle, et surtout si vous n'étiez pas conscient que vous devrez fermer la session et que vous avez le processus déjà en cours d'exécution, vous n'avez pas de chance si vous avez utilisé bash comme Shell.

Tout d'abord, vous devez envoyer le processus en arrière-plan en tapant Ctrl+Z suivi de bg %1 (le nombre dépend du numéro de la tâche, généralement c'est 1, mais vous pouvez facilement obtenir la liste en utilisant la commande jobs).

Enfin, invoquez la commande disown (suivie du jobid ... comme avec la commande bg).

Cela supprimera la relation parent-enfant entre votre Shell et le processus en arrière-plan, l'empêchant de mourir lorsque votre Shell est terminé.

2 votes

Cette réponse est la meilleure ! Pourquoi tout le monde parle de screen La question était posée après l'événement de connexion, comment maintenir les processus en cours, maintenant après la connexion mais avant de les démarrer. Excellente réponse Jorge, tu m'as vraiment aidé :)

1 votes

Tout simplement bg (sans %1 ) est souvent suffisant, puisque par défaut, c'est le travail en cours.

0 votes

Il serait bon d'avoir une réponse complète : A priori (configuration à l'avance) : écran terminal ascii (ancien), tmux (nouveau) ; X Windows : vnc (ancien, toujours maintenu), xpra (plus récent), xpra étant sans racine. A posteriori (persistant après le démarrage) : ^Z, disown, ... Mais je suis trop paresseux pour étoffer plus que ça.

5voto

DiTime4Tea Points 237

Le moyen le plus simple est d'exécuter votre commande en arrière-plan avec & . Alors, écrivez simplement :

disown -a

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X