¿Realmente no hay forma de hacer esto correctamente? He estado luchando todo el día, y ninguna de las opciones parece dejar el proceso remoto ejecutándose Y terminar el proceso SSH local. Lo mejor que tengo hasta ahora es ejecutar el SSH en segundo plano, esperar 15 segundos y luego matar el PID. Pero eso es feo.
El primero &separará el comando para el host remoto, y el segundo &separará el comando ssh en sí
En mi ejemplo, el comando de cola todavía se está ejecutando después de haber cerrado la conexión.
editar esto no parece funcionar como tailsalidas poco después de que la conexión se haya cerrado realmente.
Esto puede estar relacionado con el hecho de que está escribiendo a STDOUTlo que probablemente levantará una tubería rota después de que se cierre la conexión
edit 2 funciona bien al redirigir el comando de cola a / dev / null ^ _ ^
Solo tenga cuidado y no escriba en stderr / stdout, ni redirija la salida a un destino local
Aparentemente, este problema es de larga data (¡incluso más que su pregunta!). La solución es redirigir stdout y stderr. El ejemplo del libro de texto es este:
ssh server 'sleep 20 & exit'
que se cuelga por 20 segundos. Usando bash puedes reescribirlo en:
ssh server 'sleep 20 >/dev/null 2>&1 & exit'
que soluciona el problema Para tcsh usarías algo como:
ssh server '(sleep 20 >/dev/null) >& /dev/null & exit'
Respuestas:
Prueba esto:
fuente
batch
depende de tener un sistemacron
/ trabajoat
en el sistema remoto.El
&
en su ejemplo separará el comando ssh, pero no su programa remoto.Esto parece funcionar:
ssh remote-host 'tail -f / var / log / syslog &' &El primero
&
separará el comando para el host remoto, y el segundo&
separará el comando ssh en síEn mi ejemplo, el comando de cola todavía se está ejecutando después de haber cerrado la conexión.
editar esto no parece funcionar como
tail
salidas poco después de que la conexión se haya cerrado realmente.Esto puede estar relacionado con el hecho de que está escribiendo a
STDOUT
lo que probablemente levantará una tubería rota después de que se cierre la conexiónedit 2 funciona bien al redirigir el comando de cola a / dev / null ^ _ ^
Solo tenga cuidado y no escriba en stderr / stdout, ni redirija la salida a un destino local
fuente
Lo siguiente funcionará:
(al menos si no se le solicita una contraseña). En caso de que no lo sea, no veo una manera fácil de hacerlo.
fuente
Aparentemente, este problema es de larga data (¡incluso más que su pregunta!). La solución es redirigir stdout y stderr. El ejemplo del libro de texto es este:
que se cuelga por 20 segundos. Usando bash puedes reescribirlo en:
que soluciona el problema Para tcsh usarías algo como:
Referencias
fuente