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.
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:
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.
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
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.
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.
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.