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.
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éponses:
Essaye ça:
la source
batch
dépend d'avoir un travailcron
/at
système sur le système distant.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;La première
&
va détacher la commande pour l'hôte distant, et le second&
détachera la commande ssh elle-mêmeDans 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
la source
Ce qui suit fonctionnera:
(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.
la source
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:
qui se bloque pendant 20 secondes. En utilisant bash, vous pouvez le réécrire pour:
ce qui corrige le problème. Pour tcsh, vous utiliseriez quelque chose comme:
Références
la source