web-dev-qa-db-fra.com

Exécutez une commande dans un shell et continuez d'exécuter la commande lorsque vous fermez la session

J'utilise PuTTY pour me connecter à un serveur distant. Ce que je veux savoir, c'est s'il existe un moyen d'écrire mes commandes et de leur permettre de continuer à fonctionner après avoir fermé la session avec PuTTY. La raison en est que je ne veux pas garder l'ordinateur allumé tout le temps. Y a-t-il un moyen de faire ça?.

Mise à jour avec la solution

Pour ma question telle qu'elle est présentée, la meilleure solution est d'utiliser l'une des commandes fournies telles que Nohup, car vous n'avez pas besoin d'installer de logiciel supplémentaire. Mais si vous êtes dans le même écran d'utilisation du problème, installez-le et utilisez-le. C'est étonnant.

J'ai choisi la réponse de Norman Ramsey comme favorite car je propose plusieurs solutions en utilisant les commandes et écran. Mais veuillez vérifier les autres réponses spécialement celle de PEZ, puis vous aurez un aperçu de ce que l'écran est capable de faire.

34
Eduardo

Nohup, disown et screen sont tous bons mais screen est le meilleur car contrairement aux deux autres, screen vous permet de vous déconnecter depuis le serveur distant, laissez tout fonctionner, puis reconnectez-vous plus tard pour voir ce qui se passe. Avec Nohup et disown, vous ne pouvez pas reprendre l'interaction.

28
Norman Ramsey

écran! C'est la meilleure chose depuis le pain tranché. (Ouais, je sais que d'autres l'ont déjà suggéré, mais c'est tellement bon que le monde entier devrait se joindre à nous et le suggérer aussi.)

écran est comme, comme, ummmm ... comme utiliser VNC ou similaire pour se connecter à un destop GUI, mais pour les fenêtres de commande Shell. Vous pouvez ouvrir plusieurs "fenêtres" Shell simultanément dans la même session d'écran. Vous pouvez faire des choses comme:

  1. Démarrez une session d'écrans en utilisant "screen -dR" (habituez-vous à utiliser -dR)
    • exécuter certaines commandes dans une seule fenêtre
    • presse CTRL-A,C pour créer une nouvelle fenêtre ouvrez-y un fichier dans vim
    • presse CTRL-A, pour revenir à la première fenêtre et lancer une commande sur le fichier que vous venez de modifier
    • CTRL-A1 pour revenir à votre session vim
    • CTRL-AC pour encore une autre fenêtre et peut-être faire "Sudo-su" (parce que vous avez juste besoin d'un shell racine complet)
    • CTRL-A et démarrer un processus d'arrière-plan
    • CTRL-AC pour créer encore une nouvelle fenêtre, "tail -f" le journal de ce processus d'arrière-plan
    • CTRL-Ad pour déconnecter votre écran puis CTRL-D se déconnecter du serveur
    • Partir en vacances pendant trois semaines
    • Connectez-vous à nouveau au serveur et lancez "screen -dR" pour vous connecter à votre session d'écran existante
    • consultez le journal dans la quatrième fenêtre avec CTRL-A3 (c'est comme si vous étiez là à le regarder tout le temps)
    • CTRL-A1 pour reprendre cette session vim
    • Je suppose que vous commencez à obtenir l'image maintenant? =)

C'est comme par magie. J'utilise l'écran depuis plus longtemps que je ne me souvienne et je suis toujours totalement étonné de voir à quel point c'est génial.

EDIT : Je veux juste mentionner qu'il y a maintenant aussi tmux. Très semblable à écran, mais possède des caractéristiques uniques, le fractionnement des fenêtres étant le plus important.

84
PEZ

Essayez d'utiliser écran GN . Il vous permet d'avoir plusieurs coques ouvertes à la fois. Et vous pouvez vous déconnecter de ces shells en cours d'exécution (c'est-à-dire fermer la session avec PuTTY) et ils continueront de faire leur travail.

10
Carlos Rendon

Ce que vous recherchez est Nohup .

Voir le lien wiki pour savoir comment l'utiliser.

9
unknownuser

l'écran est le meilleur.

Essayer:

screen -dmS "MyTail" tail -f/var/log/syslog

Cette commande de démarrage en arrière-plan.

Utilisez screen -r pour lister et ou screen -r Mytail pour accéder à la session.

Si plusieurs utilisateurs ont besoin d'accéder à la même session, utilisez: screen -rx MyTail, et les deux utilisateurs ou plus partagent la session.

5
Lauro Oliveira

Si vous ne pouvez pas utiliser screen (car, par exemple, votre session SSH est pilotée par programme), vous pouvez également utiliser daemonize pour exécuter le programme en tant que démon.

4
Brian Clapper

Une façon qui fonctionne bien pour moi est at.

at fonctionne comme cron, mais pour un travail ponctuel. Je l'ai utilisé aujourd'hui pour télécharger un gros fichier sans avoir à maintenir ma session en vie.

par exemple:

$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D  

Vous passez at une fois (dans le futur) et cela vous donne une invite. Vous entrez les commandes que vous souhaitez exécuter à ce moment-là et appuyez sur ctrl + d. Vous pouvez quitter votre session et elle exécutera les commandes à l'heure spécifiée.

Wikipedia a plus d'informations sur at.

3
Joe Flynn
./command & disown
1
Nick Stinemates
ssh localhost && ./command && exit
0
totten