Comment garder les processus en cours après la fin de la session SSH?
644
Disons que je lance un tas de processus à partir d'une session SSH. Est-il possible de terminer la session ssh tout en maintenant ces processus en cours d'exécution sur la machine distante?
Vous devriez chercher des alternatives modernes comme tmux.
tmuxest supérieur à screenplusieurs raisons, voici quelques exemples:
Windows peut être déplacé d'une session à l'autre et même lié à plusieurs sessions
Les fenêtres peuvent être divisées horizontalement et verticalement en volets
Prise en charge des terminaux UTF-8 et 256 couleurs
Les sessions peuvent être contrôlées à partir du shell sans qu'il soit nécessaire d'entrer dans une session
Fonctionnalité de base
Pour obtenir les mêmes fonctionnalités comme expliqué dans la réponse recommandant screen, vous devez faire ce qui suit:
ssh dans la machine distante
commencez tmuxpar taper tmuxdans la coque
démarrer le processus que vous voulez dans la tmuxsession démarrée
quitter / détacher la tmuxsession en tapant Ctrl+ bpuisd
Vous pouvez maintenant vous déconnecter en toute sécurité de la machine distante, votre processus continuera à s'exécuter tmux. Lorsque vous reviendrez à nouveau et que vous souhaitez vérifier l’état de votre processus, vous pourrez l’utiliser tmux attachpour vous connecter à votre tmuxsession.
Si vous souhaitez que plusieurs sessions s'exécutent côte à côte, vous devez nommer chaque session à l'aide de Ctrl+ bet $. Vous pouvez obtenir une liste des sessions en cours d’exécution à l’aide de l’ tmux list-sessionsattachement à une session en cours à l’aide de la commande tmux attach-session -t 0.
tmuxpeut faire des choses beaucoup plus avancées que de gérer une seule fenêtre en une seule session. Pour plus d' informations consulter dans man tmuxou la tmux la page GitHub . En particulier, voici une FAQ sur les principales différences entre screenet tmux.
@CraigM Utilisez screen -x -r [screenname]ou screen -rxen abrégé si vous n'avez qu'une session d'écran active. Cela vous permet de joindre une instance d'écran existante.
Lekensteyn
5
Ce conseil m'a aidé avec le même problème mais je pense qu'il inclut une faute de frappe. Je suis à peu près sûr que vous avez besoin de taper Ctrl-bpuis dde quitter / détacher la tmuxsession. C’est certainement le cas de la version de tmuxmon Ubuntu 12.04.
Cxrodgers
17
J'ai fait une erreur en suivant les instructions ci-dessus. Je le partagerai si quelqu'un pouvait tomber dans la même erreur: j'ai commencé tmux dans le shell de mon propre ordinateur au lieu du shell de l'ordinateur distant. Il faut démarrer tmux dans le shell d'un ordinateur distant.
Alternativement, exécutez tmux detachau lieu de taperctrl-b d
Andrew
306
Option 1: nohup
Le meilleur moyen est souvent le plus simple.
nohup long-running-command &
Il a été conçu spécialement pour cela, il enregistre même stdout nohup.log.
man nohup
Option 2: bg
Si vous voulez « arrière - plan » certaines tâches déjà en cours d' exécution, alors votre meilleur pari est de Ctrl+ Zpuis exécutez
bg
pour mettre en arrière-plan votre tâche suspendue la plus récente, lui permettant de continuer à s'exécuter.
Ensuite, un rapide disowndevrait garder le processus en cours après votre déconnexion.
screenet d'autres peuvent le faire, mais ce n'est pas ce qu'ils font. Je recommande nohuppour les tâches que vous savez laisser et les bgtâches que vous exécutez déjà et que vous ne voulez pas redémarrer.
Gardez à l'esprit, les deux sont spécifiques. Si vous n'utilisez pas bash, les commandes peuvent être différentes.
intéressant écran et tmux ne fonctionne pas pour le mineur, bur nohup fonctionne
Yasin Okumuş
1
bg+ disownn'a pas fonctionné pour moi. J'avais un script de déploiement en cours d'exécution que j'avais oublié de démarrer dans tmux et que je devais partir tôt pour une réunion. Le script transmet en continu les progrès au shell. ctrl+zarrêté le processus, me renvoyant à bash. bga repris le processus, mais il a également repris l'affichage du statut sur bash, rendant impossible de voir ce que je tapais. Cependant, une disowncommande produit "désavoué: en cours: pas de travail de ce type"
BrianHVB
cela n'a pas fonctionné pour moi julia myFile.jlpour une raison quelconque. tmux fait et est génial.
SSH dans votre boîte à distance. Tapez screenPuis démarrez le processus que vous voulez.
Appuyez sur Ctrl- Apuis 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 -rCela "reprendra" votre session écran et vous pourrez voir la sortie de votre processus.
Je nommerai généralement mes sessions d'écran en utilisant screen -S namepour faciliter la connexion à la bonne.
David Oneill
Le lien est en panne
Gab
1
Personnellement, je travaille sur une boîte sans logiciel de contrôle de colis. Après avoir passé environ une demi-heure à créer des dépendances pour TMUX (que j’ai personnellement connu et aimé) depuis la source, il est devenu évident que l’écran était la solution la meilleure et la plus simple pour moi. TL; DR: la solution optimale à ce problème dépend du cas d'utilisation, de la machine et du temps de configuration requis. Merci pour cette réponse :)
Max von Hippel
La combinaison avec screen -Savant le congé et screen -rau retour est incroyable!
Meloman
Merci pour cela. Cette solution a fonctionné pour moi alors que tmux ne fonctionnait pas (j'utilise une version de bash pour Windows tout en ssh'ing sur une machine linux)
Michael Sorensen
83
Écran et nohup est le meilleur moyen, mais si vous devez détacher un processus déjà en cours d'exécution sans écran ou nohup, vous pouvez exécuter la commande désaveu.
disown [-ar] [-h] [jobspec… |pid… ]
Sans options, supprimez chaque jobpec du tableau des jobs actifs. Si l' -hoption est donnée, le travail n'est pas supprimé de la table, mais est marqué de sorte que SIGHUP ne soit pas envoyé au travail si le shell reçoit un message SIGHUP. Si jobpec n'est pas présent et que -ani l' -roption ni l' option n'est fournie, le travail en cours est utilisé. Si aucun jobpec n’est fourni, l’ -aoption signifie supprimer ou marquer tous les jobs; l' -roption sans l' argument jobspec limite l'opération à l'exécution des travaux.
Avec désavoué, vous pouvez fermer le terminal et lancer le processus sur la machine.
C'est aussi ma façon préférée de le faire. J'utilise souventdisown -a && exit
Stefano Palazzo
1
Parfait. C'est une commande charmante et mérite tous les votes positifs!
Greg
8
Un mot de prudence, j'ai arrêté un processus en cours d'exécution avec Ctrl-Z et ne l'ai pas démarré en arrière-plan avant d'appeler disownet il l'a tué.
HDave
3
Peut tomber en panne s'il veut écrire sur le terminal. Redirection de la sortie d'un processus en cours n'est pas aussi facile. Mieux vaut commencer correctement avec nohup.
Jiggunjer
2
C'est une bonne réponse car elle répond directement à la question. L'auteur de la question a demandé quoi faire après avoir déjà exécuté de nombreuses commandes. La plupart de ces réponses vous permettent de savoir quoi faire avant d'exécuter les commandes.
Q0rban
53
J'étais coincé dans un grand mv et je n'étais donc pas en mesure d'arrêter le processus, de configurer l'écran puis de le redémarrer. J'ai réussi à quitter la session ssh avec le processus en cours d'exécution en effectuant essentiellement les étapes suivantes:
ssh [serveur]
commander
Ctrl+Z
bg
disown [processus pid facultatif, dernier par défaut]
sortie
L'étape 3 met en pause le processus en cours (par exemple, ma commande 'mv').
L'étape 4 met le processus en pause à l'arrière-plan et le reprend.
L'étape 5 vous permet de désavouer le processus. ** Pour obtenir une liste des tâches, tapez simplement jobsavant.
** Concernant désavoué (du manuel bash):
disown [-ar] [-h] [jobspec ... | pid ... ]
Without options, remove each jobspec from the table of active
jobs. If jobspec is not present, and neither the -a nor the -r
option is supplied, the current job is used. If the -h option
is given, each jobspec is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell
receives a SIGHUP. If no jobspec is supplied, the -a option
means to remove or mark all jobs; the -r option without a job‐
spec argument restricts operation to running jobs. The return
value is 0 unless a jobspec does not specify a valid job.
Cette réponse devrait être marquée comme étant juste. Pour installer et s’habituer à la résolution de ce problème est exagéré.
Ulrich-Lorenz Schlüter
Ceci est très utile lorsque vous avez déjà lancé une commande et qui est en cours d'exécution depuis longtemps. Terminer et démarrer dans une session TMUX prendra du temps
Deepali Mittal
1
@ tom-brossman: Faites attention aux modifications inutiles comme celle-ci ! Si elle est appelée sans spécification de travail, la disowncommande intégrée agit sur le travail en arrière-plan le plus récent.
David Foerster
22
Il existe deux programmes principaux que vous pouvez utiliser pour gérer les programmes et l’état du terminal sur plusieurs connexions ssh. Ils sont screen (l'opérateur historique, mais malheureusement non entretenu. Apparemment, il est activement développé maintenant ) et tmux (plus récent, maintenu activement). Byobu est une interface qui peut s’appliquer par-dessus leurs systèmes et offrir des informations supplémentaires sur le statut d’Ubuntu. Sur les nouvelles installations, il utilisera tmux en tant que backend. Si vous avez une ancienne installation de byobu et une configuration existante, il conservera le backend précédent, que ce soit screen ou tmux.
Byobu
Byobu peut être installé sur l'ordinateur en le faisant sur une machine 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 de byobu
Vous pouvez commencer byobu en s'exécutant byobusur la machine hôte après la connexion en utilisant ssh. Cela vous donnera une coquille qui ressemble à ceci:
Vous pouvez également utiliser Byobu Terminal sur une machine Ubuntu avec l'option -X et disposer facilement d'un Byobu qui fonctionne parfaitement.
Usage:
Commencez byobu en tapant byobu.
Vous pouvez appuyer sur F2 pour créer une nouvelle fenêtre dans la session en cours, sur F3-F4 pour passer d’une fenêtre à l’autre.
La meilleure chose à propos de Byobu est que vous n’avez pas à tuer réellement les processus en cours dans le terminal pour quitter le terminal. Vous pouvez simplement envoyer screen / tmux (le squelette de byobu) en arrière-plan et reprendre la prochaine fois:
Pour quitter Byobu et le laisser courir (détacher), appuyez sur F6.
La prochaine fois que tu viendras, fais-le byobuet tu devras être exactement là où tu étais.
Vous pouvez également créer diverses sessions byobu par byobu -S session1et ainsi de suite. Et vous pouvez vous connecter à l’un d’eux à votre retour.
Vous pouvez faire beaucoup plus avec Byobu. Utilise le! Certains guides définitifs sont ici , ou ici .
J'ai essayé d'utiliser byobu depuis une session PuTTY vers ma boîte Ubuntu, mais la ligne d'état est répétée et le défilement est affiché. Bien qu’elle se soit correctement détachée en appuyant sur F6, ce n’était pas une solution utilisable dans ma configuration.
Jfmessier
1
@ jfmessier C'est parce que PuTTY ne prend pas bien ncurses (utf-8). Il est possible d'éliminer ce problème en suivant ce fil - stackoverflow.com/questions/10731099/…
SiddharthaRT
C'est génial! 1. Cela me donne une invite colorée que je n'arrive pas à activer avec bash comme shell par défaut et 2. Je peux exécuter 2 bots en même temps et avoir toujours un autre terminal sur lequel travailler! @SiddharthaRT vous méritez un monsieur upvote!
Dev
18
Vous ne pouvez pas faire cela une fois le processus démarré, vous devez avoir configuré les éléments avant d'exécuter un travail de longue durée.
Vous pouvez utiliser nohup mais la sagesse moderne vous suggère d'utiliser screen ou byobu comme identifiant afin de pouvoir vous détacher et laisser les choses en cours d'exécution.
Screen présente l’avantage de pouvoir se détacher d’une machine et se rattacher à une autre, ce qui est pratique si vous souhaitez vérifier les processus longs qui s’exécutent au-delà de la fin de la journée de travail.
Byobu met une interface facile à utiliser en haut de l'écran avec des menus, etc. C'est également la mise en œuvre actuelle de l'écran sur les nouveaux Ubuntu. F2 pour démarrer un nouveau terminal F3 / F4 pour basculer et F6 pour se déconnecter. Tapez exit pour terminer les terminaux de façon permanente.
"Vous ne pouvez pas faire cela une fois que le processus a démarré, vous devez avoir configuré les éléments avant d'exécuter un travail de longue durée." - non, vous pouvez utiliser disownpour y parvenir. Voir la réponse de @ bassgey
Rich
1
après avoir eu du mal à apprendre l'écran et le tmux ... Byobu m'a fait pleurer
HDave
disownet si nécessaire juste Ctrl-z, puis l' bgobtenir du terminal actif et à l'arrière-plan. Ensuite, disown.
Mimoralea
8
Hey, alors que je suis d'accord que l'écran est l'option la plus efficace. Vous pouvez utiliser vncserver et ensuite lancer le processus.
De plus, si votre seul intérêt est de faire fonctionner le processus sans avoir à en reprendre le contrôle, et surtout que vous ne saviez pas que vous auriez besoin de fermer la session et que le processus est déjà en cours d'exécution, vous n'avez pas de chance si vous avez utilisé bash comme shell
Vous devez d’abord envoyer le processus à l’arrière-plan en tapant Ctrl + Z suivi de bg% 1 (le nombre dépend du numéro de travail, il s’agit généralement de 1, mais vous pouvez facilement extraire la liste à l’aide de la commande jobs).
Enfin, invoquez la commande disown (suivie de la jobid ... identique à 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é.
Cette réponse est la meilleure! Pourquoi tout le monde parle screen, la question a été 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. Super réponse Jorge, tu m'as vraiment aidé! :)
jwbensley
1
Simplement bg(sans %1) est souvent suffisant, car le travail par défaut est l'emploi actuel
Walter Tross
Il serait bien d’avoir une réponse complète: A priori (configuration préalable): écran du terminal ascii (ancien), tmux (plus récent); X windows: vnc (ancien, toujours maintenu), xpra (plus récent), xpra étant sans racine. Un postérieur (persistant après avoir commencé): ^ Z, désavoué, ... Mais je suis trop paresseux pour le préciser.
Krazy Glew
8
Pour un seul script shell exécuté sur une longue période, je vais me connecter et exécuter le processus en arrière-plan à l'aide de '&'.
Exemple:
/path/to/my/script &
J'ai déconnecté et déconnecté ma session SSH. Lorsque je me connecte un peu plus tard, le script est toujours en cours d'exécution, comme le prouve la collecte continue de données à partir du script.
Oui, j'aimerais savoir en quoi screen / tmux est meilleur que cette solution simple.
Mads Skjern
Oui, je le vois aussi sur mon ubuntu, mais cela ne devrait pas se produire en théorie. Je ne comprends pas pourquoi
Daniel Pinyol
1
@MadsSkjern Parce que vous ne pouvez entrer aucune entrée dans le script en utilisant cette méthode.
Ken Sharp
1
@MadsSkjern la raison en est que si vous exécutez des processus de ce type avec &si vous vous déconnectez et que vous vous connectez à votre session SSH, le processus sera toujours en cours d'exécution, mais vous ne pourrez pas voir la sortie de ce processus (si votre script renvoie quelque ne le verra pas, mais s'il écrit un fichier, il sera là)
DarkCygnus
4
Vous devriez vérifier GNU Screen et voir si cela vous aide. En fonction de la manière dont vous avez besoin que votre application s'exécute en temps réel, le nombre de problèmes générés peut être supérieur à sa résolution, mais au moins, cela vous permettra de reprendre votre session comme si vous ne l'aviez jamais quittée.
Comment utiliser :
Utilisez la commande screenpour le premier démarrage, faites défiler les messages d'introduction, vous devriez recevoir un terminal.
Ca Cc ouvre un autre terminal
Ca Ck tue un terminal
Vous pouvez utiliser Ca C-Space et Ca C-Backspace pour parcourir les terminaux.
Ca Ca est pratique si vous utilisez principalement deux terminaux
Ca Cd détache la session d'écran en cours et quitte les écrans. Vous pouvez ensuite utiliser screen -rpour reprendre cette session. Vous pouvez avoir plusieurs sessions d'écran séparées à la fois. Dans ce cas, une liste des sessions disponibles s'affiche.
Il existe de nombreuses autres options, par exemple des écrans divisés, et tous les raccourcis sont entièrement personnalisables.
Sans désavouer le processus (avec quelque chose comme disownou nohup), cela ne gardera généralement pas le processus en cours après la fin de la session SSH.
Eliah Kagan
3
Sur mon serveur Ubuntu, avec la configuration par défaut, il continue vraiment à fonctionner!
Mads Skjern
3
Le moyen le plus simple consiste à exécuter votre commande en arrière-plan avec &. Ensuite, écrivez simplement:
Alors que tout le monde dit d’utiliser disown(la seule option que vous avez après que vous ayez déjà démarré le processus), nohupou même d’exécuter la commande dans screen, ce qui est utile si vous voulez voir tout le résultat de la commande ... Je suis fan de screen..J'ai toujours essayé les distributions les plus récentes de Linux traditionnelles et mettre simplement le travail en arrière-plan et quitter ne provoque pas la mort de tous les processus en cours. Il doit y avoir un cadre global ou quelque chose. J'essaie ceci sur de très vieux systèmes (slackware 12) et mon script de test continue à s'exécuter jusqu'à ce que je le tue manuellement:
Même si je suis d' accord que screence serait la meilleure façon d'exécuter ce, même si mon script écrit pour les fichiers journaux ou tout .. Je ne l' ai jamais eu besoin d'utiliser disown -a ou à nohupmoins qu'il était hors de la paranoïa complète. Peut-être que quelqu'un peut nous éclairer sur le comportement par défaut de bash? Certains administrateurs système peuvent peut-être modifier les valeurs par défaut des grands shells pour empêcher les processus de leurs utilisateurs de surcharger le système?
Si vous avez d'autres questions, posez-les comme une nouvelle question
heemayl
0
Malheureusement, une session SSH terminée peut entraîner la destruction de tmux ou d'un écran. En effet systemd, tous les processus enfants seront terminés lors de la déconnexion d'une session.
Vous pouvez modifier ce paramètre dans votre logind.conf( /etc/systemd/logind.conf):
Réponses:
Vous devriez chercher des alternatives modernes comme
tmux
.tmux
est supérieur àscreen
plusieurs raisons, voici quelques exemples:Fonctionnalité de base
Pour obtenir les mêmes fonctionnalités comme expliqué dans la réponse recommandant
screen
, vous devez faire ce qui suit:tmux
par tapertmux
dans la coquetmux
session démarréetmux
session en tapant Ctrl+ bpuisdVous pouvez maintenant vous déconnecter en toute sécurité de la machine distante, votre processus continuera à s'exécuter
tmux
. Lorsque vous reviendrez à nouveau et que vous souhaitez vérifier l’état de votre processus, vous pourrez l’utilisertmux attach
pour vous connecter à votretmux
session.Si vous souhaitez que plusieurs sessions s'exécutent côte à côte, vous devez nommer chaque session à l'aide de Ctrl+ bet
$
. Vous pouvez obtenir une liste des sessions en cours d’exécution à l’aide de l’tmux list-sessions
attachement à une session en cours à l’aide de la commandetmux attach-session -t 0
.tmux
peut faire des choses beaucoup plus avancées que de gérer une seule fenêtre en une seule session. Pour plus d' informations consulter dansman tmux
ou la tmux la page GitHub . En particulier, voici une FAQ sur les principales différences entrescreen
ettmux
.la source
screen -x -r [screenname]
ouscreen -rx
en abrégé si vous n'avez qu'une session d'écran active. Cela vous permet de joindre une instance d'écran existante.Ctrl-b
puisd
de quitter / détacher latmux
session. C’est certainement le cas de la version detmux
mon Ubuntu 12.04.tmux detach
au lieu de taperctrl-b d
Option 1:
nohup
Le meilleur moyen est souvent le plus simple.
Il a été conçu spécialement pour cela, il enregistre même stdout
nohup.log
.Option 2:
bg
Si vous voulez « arrière - plan » certaines tâches déjà en cours d' exécution, alors votre meilleur pari est de Ctrl+ Zpuis exécutez
pour mettre en arrière-plan votre tâche suspendue la plus récente, lui permettant de continuer à s'exécuter.
Ensuite, un rapide
disown
devrait garder le processus en cours après votre déconnexion.screen
et d'autres peuvent le faire, mais ce n'est pas ce qu'ils font. Je recommandenohup
pour les tâches que vous savez laisser et lesbg
tâches que vous exécutez déjà et que vous ne voulez pas redémarrer.Gardez à l'esprit, les deux sont spécifiques. Si vous n'utilisez pas bash, les commandes peuvent être différentes.
la source
disown -h
bg
+disown
n'a pas fonctionné pour moi. J'avais un script de déploiement en cours d'exécution que j'avais oublié de démarrer dans tmux et que je devais partir tôt pour une réunion. Le script transmet en continu les progrès au shell.ctrl+z
arrêté le processus, me renvoyant à bash.bg
a repris le processus, mais il a également repris l'affichage du statut sur bash, rendant impossible de voir ce que je tapais. Cependant, unedisown
commande produit "désavoué: en cours: pas de travail de ce type"julia myFile.jl
pour une raison quelconque. tmux fait et est génial.Vous pouvez le faire en utilisant
screen
.Tapez
man screen
pour en savoir plus ou lisez cette page de manuel d'écran .Scénario simple:
SSH dans votre boîte à distance. Tapez
screen
Puis démarrez le processus que vous voulez.Appuyez sur Ctrl- Apuis 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
Cela "reprendra" votre session écran et vous pourrez voir la sortie de votre processus.la source
screen -S name
pour faciliter la connexion à la bonne.screen -S
avant le congé etscreen -r
au retour est incroyable!Écran et nohup est le meilleur moyen, mais si vous devez détacher un processus déjà en cours d'exécution sans écran ou nohup, vous pouvez exécuter la commande désaveu.
Avec désavoué, vous pouvez fermer le terminal et lancer le processus sur la machine.
la source
disown -a && exit
disown
et il l'a tué.J'étais coincé dans un grand mv et je n'étais donc pas en mesure d'arrêter le processus, de configurer l'écran puis de le redémarrer. J'ai réussi à quitter la session ssh avec le processus en cours d'exécution en effectuant essentiellement les étapes suivantes:
L'étape 3 met en pause le processus en cours (par exemple, ma commande 'mv').
L'étape 4 met le processus en pause à l'arrière-plan et le reprend.
L'étape 5 vous permet de désavouer le processus. ** Pour obtenir une liste des tâches, tapez simplement
jobs
avant.** Concernant désavoué (du manuel bash):
la source
disown
commande intégrée agit sur le travail en arrière-plan le plus récent.Il existe deux programmes principaux que vous pouvez utiliser pour gérer les programmes et l’état du terminal sur plusieurs connexions ssh. Ils sont screen (l'opérateur historique, mais malheureusement non entretenu. Apparemment, il est activement développé maintenant ) et tmux (plus récent, maintenu activement). Byobu est une interface qui peut s’appliquer par-dessus leurs systèmes et offrir des informations supplémentaires sur le statut d’Ubuntu. Sur les nouvelles installations, il utilisera tmux en tant que backend. Si vous avez une ancienne installation de byobu et une configuration existante, il conservera le backend précédent, que ce soit screen ou tmux.
Byobu
Byobu peut être installé sur l'ordinateur en le faisant sur une machine Debian:
En utilisant yum, vous faites
Il est également possible d'installer byobu sur d'autres distributions.
Utilisation de byobu
Vous pouvez commencer byobu en s'exécutant
byobu
sur la machine hôte après la connexion en utilisant ssh. Cela vous donnera une coquille qui ressemble à ceci:Vous pouvez également utiliser Byobu Terminal sur une machine Ubuntu avec l'option -X et disposer facilement d'un Byobu qui fonctionne parfaitement.
Usage:
Commencez byobu en tapant
byobu
.Vous pouvez appuyer sur F2 pour créer une nouvelle fenêtre dans la session en cours, sur F3-F4 pour passer d’une fenêtre à l’autre.
La meilleure chose à propos de Byobu est que vous n’avez pas à tuer réellement les processus en cours dans le terminal pour quitter le terminal. Vous pouvez simplement envoyer screen / tmux (le squelette de byobu) en arrière-plan et reprendre la prochaine fois:
La prochaine fois que tu viendras, fais-le
byobu
et tu devras être exactement là où tu étais.Vous pouvez également créer diverses sessions byobu par
byobu -S session1
et ainsi de suite. Et vous pouvez vous connecter à l’un d’eux à votre retour.Vous pouvez faire beaucoup plus avec Byobu. Utilise le! Certains guides définitifs sont ici , ou ici .
la source
Vous ne pouvez pas faire cela une fois le processus démarré, vous devez avoir configuré les éléments avant d'exécuter un travail de longue durée.
Vous pouvez utiliser nohup mais la sagesse moderne vous suggère d'utiliser screen ou byobu comme identifiant afin de pouvoir vous détacher et laisser les choses en cours d'exécution.
Screen présente l’avantage de pouvoir se détacher d’une machine et se rattacher à une autre, ce qui est pratique si vous souhaitez vérifier les processus longs qui s’exécutent au-delà de la fin de la journée de travail.
Il existe un guide de mise en route raisonnable à sélectionner ici.
Byobu met une interface facile à utiliser en haut de l'écran avec des menus, etc. C'est également la mise en œuvre actuelle de l'écran sur les nouveaux Ubuntu. F2 pour démarrer un nouveau terminal F3 / F4 pour basculer et F6 pour se déconnecter. Tapez exit pour terminer les terminaux de façon permanente.
la source
disown
pour y parvenir. Voir la réponse de @ bassgeydisown
et si nécessaire justeCtrl-z
, puis l'bg
obtenir du terminal actif et à l'arrière-plan. Ensuite,disown
.Hey, alors que je suis d'accord que l'écran est l'option la plus efficace. Vous pouvez utiliser vncserver et ensuite lancer le processus.
De plus, si votre seul intérêt est de faire fonctionner le processus sans avoir à en reprendre le contrôle, et surtout que vous ne saviez pas que vous auriez besoin de fermer la session et que le processus est déjà en cours d'exécution, vous n'avez pas de chance si vous avez utilisé bash comme shell
Vous devez d’abord envoyer le processus à l’arrière-plan en tapant Ctrl + Z suivi de bg% 1 (le nombre dépend du numéro de travail, il s’agit généralement de 1, mais vous pouvez facilement extraire la liste à l’aide de la commande jobs).
Enfin, invoquez la commande disown (suivie de la jobid ... identique à 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é.
la source
screen
, la question a été 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. Super réponse Jorge, tu m'as vraiment aidé! :)bg
(sans%1
) est souvent suffisant, car le travail par défaut est l'emploi actuelPour un seul script shell exécuté sur une longue période, je vais me connecter et exécuter le processus en arrière-plan à l'aide de '&'.
Exemple:
J'ai déconnecté et déconnecté ma session SSH. Lorsque je me connecte un peu plus tard, le script est toujours en cours d'exécution, comme le prouve la collecte continue de données à partir du script.
la source
&
si vous vous déconnectez et que vous vous connectez à votre session SSH, le processus sera toujours en cours d'exécution, mais vous ne pourrez pas voir la sortie de ce processus (si votre script renvoie quelque ne le verra pas, mais s'il écrit un fichier, il sera là)Vous devriez vérifier GNU Screen et voir si cela vous aide. En fonction de la manière dont vous avez besoin que votre application s'exécute en temps réel, le nombre de problèmes générés peut être supérieur à sa résolution, mais au moins, cela vous permettra de reprendre votre session comme si vous ne l'aviez jamais quittée.
Comment utiliser :
screen
pour le premier démarrage, faites défiler les messages d'introduction, vous devriez recevoir un terminal.screen -r
pour reprendre cette session. Vous pouvez avoir plusieurs sessions d'écran séparées à la fois. Dans ce cas, une liste des sessions disponibles s'affiche.Il existe de nombreuses autres options, par exemple des écrans divisés, et tous les raccourcis sont entièrement personnalisables.
la source
Réponse la plus simple ...
ctrl + z suspendra le programme en cours
"bg" le lancera en arrière plan
la source
disown
ounohup
), cela ne gardera généralement pas le processus en cours après la fin de la session SSH.Le moyen le plus simple consiste à exécuter votre commande en arrière-plan avec
&
. Ensuite, écrivez simplement:la source
Alors que tout le monde dit d’utiliser
disown
(la seule option que vous avez après que vous ayez déjà démarré le processus),nohup
ou même d’exécuter la commande dansscreen
, ce qui est utile si vous voulez voir tout le résultat de la commande ... Je suis fan descreen
..J'ai toujours essayé les distributions les plus récentes de Linux traditionnelles et mettre simplement le travail en arrière-plan et quitter ne provoque pas la mort de tous les processus en cours. Il doit y avoir un cadre global ou quelque chose. J'essaie ceci sur de très vieux systèmes (slackware 12) et mon script de test continue à s'exécuter jusqu'à ce que je le tue manuellement:Même si je suis d' accord que
screen
ce serait la meilleure façon d'exécuter ce, même si mon script écrit pour les fichiers journaux ou tout .. Je ne l' ai jamais eu besoin d'utiliserdisown -a
ou ànohup
moins qu'il était hors de la paranoïa complète. Peut-être que quelqu'un peut nous éclairer sur le comportement par défaut de bash? Certains administrateurs système peuvent peut-être modifier les valeurs par défaut des grands shells pour empêcher les processus de leurs utilisateurs de surcharger le système?la source
Malheureusement, une session SSH terminée peut entraîner la destruction de tmux ou d'un écran. En effet
systemd
, tous les processus enfants seront terminés lors de la déconnexion d'une session.Vous pouvez modifier ce paramètre dans votre
logind.conf
(/etc/systemd/logind.conf
):Merci de répondre à https://unix.stackexchange.com/questions/490267 .
la source
Au lieu de :
Ajouter avant
nohup
:Ensuite, vous pourrez voir le stdout de la console en:
la source