¿Cómo iniciar un proceso remoto a través de ssh y finalizar la conexión?

3

Esto sigue bloqueando:

ssh host nohup cmd

Esto todavía deja la conexión abierta:

ssh host nohup cmd &

fuente
¿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.
Martillo hermano.

Respuestas:

1

Prueba esto:

ssh host batch cmd
Mox
fuente
Este es un buen enfoque, pero tenga en cuenta que batchdepende de tener un sistema cron/ trabajo aten el sistema remoto.
coneslayer
1

El &en su ejemplo separará el comando ssh, pero no su programa remoto.

Esto parece funcionar:

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

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

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

Romuald Brunet
fuente
0

Lo siguiente funcionará:

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

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

guardado
fuente
0

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'

Referencias

Pablo
fuente