Exécuter une commande nohup sur SSH, puis se déconnecter

36

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

Comment puis-je SSH sur la machine distante, lancez une commande nohup en arrière-plan, puis déconnectez-vous? Je suppose que je pourrais mettre le processus SSH lui-même en arrière-plan, mais cela ne semble pas correct.

    
posée Steve Bennett 24.09.2013 - 00:53
la source

3 réponses

33

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

  

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

En gros, vous pouvez le faire d'une manière ou d'une autre:

Exécuter directement la commande {, s}

ssh [email protected] "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"

OU

ssh [email protected] "$(nohup command1 > /dev/null 2>&1 &) && nohup command2 >> /path/to/log 2>&1 &"

  

REMARQUE : && requiert que la première commande renvoie 0 avant d’exécuter le second

Document d'utilisation

ssh [email protected] << 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 oeil à la réponse ici: lien

    
réponse donnée Terry Wang 24.09.2013 - 01:23
la source
3

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

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

Ceci est pratique si c'est quelque chose qui se boucle en continu ou prend un certain temps pour finir. Vous pouvez vous déconnecter de la session et celle-ci restera active.

    
réponse donnée Anon 13.11.2014 - 21:02
la source
2

Forme plus courte:

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

Il semble que bash lui-même effectue le détachement du terminal, donc pas besoin de rien. Je lance Ubuntu 14.04 x86_64, bash 4.3.11.

    
réponse donnée Alek_A 27.02.2016 - 11:40
la source

Lire d'autres questions sur les étiquettes