Comment lancer un processus distant via ssh et mettre fin à la connexion?

3

Ceci bloque toujours:

ssh host nohup cmd

Cela laisse encore la connexion ouverte:

ssh host nohup cmd &

la source
N'y a-t-il vraiment aucun moyen de le faire correctement? J'ai eu du mal toute la journée et aucune des options ne semble laisser le processus distant en marche ET terminer le processus SSH local. Le mieux que j'ai à ce jour est d'exécuter le SSH en arrière-plan, d'attendre 15 secondes, puis d'éliminer le PID. Mais c'est moche.
Hammer Bro.

Réponses:

1

Essaye ça:

ssh host batch cmd
Mox
la source
C'est une bonne approche, mais notez que batch dépend d'avoir un travail cron / at système sur le système distant.
coneslayer
1

le & dans votre exemple, détachera la commande ssh, mais pas votre programme distant.

Cela semble fonctionner:

ssh hôte distant 'tail -f / var / log / syslog & amp;' & amp;

ssh remote-host 'tail -f /var/log/syslog > /dev/null &' &

La première & va détacher la commande pour l'hôte distant, et le second & détachera la commande ssh elle-même

Dans mon exemple, la commande tail est toujours en cours d'exécution après la fermeture de la connexion.


modifier cela ne semble pas fonctionner comme tail quitte peu après la fermeture de la connexion.

Cela peut être lié au fait qu'il écrit à STDOUT qui relèvera probablement un tuyau cassé après la fermeture de la connexion

éditer 2 fonctionne bien lors de la redirection de la commande tail vers / dev / null ^ _ ^

Soyez prudent et n'écrivez pas dans stderr / stdout, ni de rediriger la sortie vers une destination locale

Romuald Brunet
la source
0

Ce qui suit fonctionnera:

ssh myhost " nohup ./r.sh & " & sleep 2 ; kill -9 $! && echo

(du moins si aucun mot de passe ne vous est demandé). Au cas où vous l'êtes, je ne vois pas de moyen facile de le faire.

skeept
la source
0

Ce problème est apparemment ancien (même plus long que votre question!). La solution consiste à rediriger stdout et stderr. L'exemple de livre de texte est la suivante:

ssh server 'sleep 20 & exit'

qui se bloque pendant 20 secondes. En utilisant bash, vous pouvez le réécrire pour:

ssh server 'sleep 20 >/dev/null 2>&1 & exit'

ce qui corrige le problème. Pour tcsh, vous utiliseriez quelque chose comme:

ssh server '(sleep 20 >/dev/null) >& /dev/null & exit'

Références

Paul
la source