58 votes

Exécutez une commande nohup en 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 ça :

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

Cela lance 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 me connecter en SSH à la machine distante, lancer une nohup en arrière-plan, puis se déconnecter ? Je suppose que je pourrais mettre le processus SSH lui-même en arrière-plan, mais cela ne semble pas correct.

48voto

Terry Wang Points 8890

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

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

En fait, vous pouvez le faire de l'une ou l'autre façon :

Exécutez directement la commande{,s}

ssh user@host "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"

OU

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

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

Utiliser ce document

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 vous convenir.

En outre, jetez un coup d'œil à la réponse ici : https://askubuntu.com/a/348921/70270

11voto

Sergey Cherepanov Points 111
ssh node "nohup sleep 10 &"

ne fonctionne pas en mode démon, en gardant votre session ssh connectée. La session ssh reviendra dans 10 secondes, même si vous avez utilisé nohup.

La raison en est que les stdout et stderr distants sont toujours connectés à votre session. Cela maintient la session ssh en vie, nohup n'aide pas.

Ceci :

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

revient immédiatement. Il démarre le processus distant avec nohup et quitte la session ssh immédiatement.

8voto

Christina Mayers Points 381

Pourquoi ne pas simplement utiliser tmux ou screen et en finir avec ça ? Par exemple :

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

C'est pratique s'il s'agit de quelque chose qui tourne en boucle ou qui prend du temps à se terminer. Vous pouvez vous déconnecter de la session et elle restera active.

4voto

Bob Spryn Points 6886

Forme abrégée :

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

Il semble que bash lui-même se détache du terminal, donc pas besoin de nohup. J'utilise Ubuntu 14.04 x86_64, bash 4.3.11.

1voto

AmirHossein Points 219

Et enfin, n'oubliez pas de ne pas allouer un tty à votre session.
Si vous faites cela, cela ne fonctionnera pas.

Donc si vous avez -t o -tt o -ttt et ainsi de suite dans votre commande. C'est la raison pour laquelle cela ne fonctionne pas pour vous.

Ainsi, au lieu de

ssh -tt host "(command 1; command 2; ...) &>/dev/null &"

Utilisez

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X