PuTTY ou OTHER - Continuez à exécuter la commande même après avoir quitté PuTTY [duplicate]

13

J'ai quelques commandes à exécuter. Ces commandes doivent être exécutées en continu même après avoir quitté mon interface. Lorsque j'ai accès à l'interface graphique Linux, j'exécute quelque chose comme:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Toute aide sera très appréciée.

user3331952
la source
Y a-t-il une raison pour laquelle vous n'exécutez pas ces services en tant que démons?
SevenSidedDie
Les commandes sont-elles censées être des services qui devraient s'exécuter à presque 100% de disponibilité "pour toujours", ou une tâche de traitement de longue durée qui devrait se terminer après un certain temps? Toutes les réponses "fonctionneront" dans les deux cas, mais la bonne recommandation sera différente.
Peteris
Quelle distribution spécifique de Linux utilisez-vous? J'ai trouvé que l'exécution set -m;fait en sorte que mes scripts continuent de s'exécuter après ma déconnexion sur CentOS et RHEL.
ArtOfWarfare

Réponses:

33

Essayer

nohup Background_ScriptX &

nohup garantit qu'un processus n'est pas terminé lorsqu'un terminal est fermé. Le symbole & pousse le processus en arrière-plan.

J'espère que cela vous a été utile.

Eamonn Travers
la source
nohup fait définitivement le travail
Pitto
Heureux d'avoir pu aider.
Eamonn Travers
15
screen a un net avantage sur nohup : nohup ne vous permet pas de revenir à une commande en cours (par exemple le lendemain matin pour lire sa sortie standard, puis choisissez de la tuer, etc.). l'écran vous permet de faire exactement cela.
Andreas F
1
nohup envoie la sortie dans un fichier où elle peut être traitée.
Brian Knoblauch
Pour ceux qui nohupdébutent, c'est essentiellement "pas de raccrochage" - avec nohup, le HUPsignal de raccrochage ( ) est ignoré.
Dan7119
20

Si vous souhaitez lire la sortie à une date ultérieure, vous pouvez utiliser screen:

screen -d -m my_command

Cela vous donne un terminal détaché auquel vous pouvez vous connecter plus tard ( screen -r) pour lire la sortie stdout / stderr.

marque
la source
2
+1. D'une part, si vous fermez votre terminal (par exemple du mastic), puis vous l'ouvrez à nouveau et vous le rattachez à screen ( screen -r), vous aurez également toutes les sorties produites par votre programme et vous auriez sinon "raté". De plus, l'écran peut faire tellement de choses incroyables, comme les écrans divisés, etc.! :)
Alberto Santini
6

Une autre option si la nohupcommande n'est pas disponible consiste à utiliser la commande disown .

Vous pouvez d'abord afficher vos tâches d'arrière-plan en exécutant jobsdans le terminal. Vous pouvez obtenir le numéro de travail à partir de là.

Maintenant, exécutez simplement disown %[job number]et le processus sera détaché du terminal actuel et restera en vie lorsque vous vous déconnecterez.

Note latérale: Assurez-vous que vous posez la bonne question. Si vous exécutez des services réels comme vous l'indiquez dans votre exemple, vous voudrez peut-être voir comment créer un démon dans le système d'exploitation de votre choix. Il s'agit de s'assurer que le processus s'exécute toujours après un redémarrage et de le rendre plus cohérent avec les autres services.

J'espère que cela t'aides.

user391035
la source
3

Depuis screena été mentionné: il existe d'autres multiplexeurs terminaux. J'aime tmuxbeaucoup, voir par exemple cette autre question de super-utilisateur, tmux vs écran pour une comparaison.

1k5
la source
0

Vous pouvez également essayer: setsid Setsid fonctionne également avec les programmes en arrière-plan et leur permet de continuer à fonctionner après la déconnexion de la session terminal / ssh.

Utilisez-le comme ceci:

setsid program-to-background

Page de manuel: http://man7.org/linux/man-pages/man2/setsid.2.html

nulldev
la source