web-dev-qa-db-fra.com

Exécutez une commande Nohup sur SSH, puis déconnectez-vous

Je veux exécuter un script, start.sh sur un serveur distant qui exécute ceci:

Nohup node server.js &

Naïvement, j'appelle SSH comme ceci:

ssh myserver <<EOF
./start.sh &
EOF

Cela démarre le script, mais laisse la session connectée. Je veux suivre cette étape avec d'autres commandes dans un script, donc ce n'est pas bon.

Comment puis-je SSH sur la machine distante, lancer une commande Nohup en arrière-plan, puis se déconnecter? Je suppose que je pourrais mettre le processus SSH en arrière-plan, mais cela ne semble pas correct.

43
Steve Bennett

Vous avez déjà trouvé le bon chemin, voici le document.

NOTE: vous pouvez mettre le ssh (client) en arrière-plan en plaçant un & à la fin, mais vous ne verrez pas le résultat. Si vous voulez vraiment faire cela, redirigez stdout/stderr vers un fichier au cas où vous auriez besoin de vérifier la réponse de l'hôte distant.

Fondamentalement, vous pouvez le faire de deux manières:

Lancer directement la commande {, s}

ssh user@Host "Nohup command1 > /dev/null 2>&1 &; Nohup command2; command3"

OR

ssh user@Host "$(Nohup command1 > /dev/null 2>&1 &) && Nohup command2 >> /path/to/log 2>&1 &"

NOTE: && requiert que la première commande renvoie 0 avant d'exécuter la seconde.

Utiliser le document ici

ssh user@Host << EOF
Nohup command1 > /dev/null 2>&1 &
Nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF

Les 3 options ci-dessus devraient fonctionner pour vous.

En outre, jetez un oeil à la réponse ici: https://askubuntu.com/a/348921/7027

40
Terry Wang

Pourquoi ne pas simplement tmux ou screen et en finir? Par exemple:

$ tmux new -s SessionNameHere
$ Nohup /path/to/your/script.sh

C'est pratique si c'est quelque chose qui va tourner en boucle ou prendre du temps. Vous pouvez vous déconnecter de la session et celle-ci restera active.

6
Anon

Forme plus courte:

ssh Host "(command 1; command 2; ...) &>/dev/null &"

Il semble que bash se déconnecte du terminal, donc aucun Nohup n’est nécessaire. Je lance Ubuntu 14.04 x86_64, bash 4.3.11.

2
Alek_A
ssh node "Nohup sleep 10 &"

ne fonctionne pas en mode démon, votre session ssh reste connectée. La session Ssh reviendra dans 10 secondes, malgré l'utilisation de Nohup.

La raison est que stdout et stderr distants sont toujours connectés à votre session. Il maintient la session SSH en vie, Nohup ne aide pas.

Ce:

ssh node "Nohup sleep 10 1>/dev/null 2>/dev/null &"

revient immédiatement. Il commence le processus à distance avec Nohup et quitte immédiatement la session ssh.

2
Sergey Cherepanov