linux - trabajos - Use SSH para iniciar un proceso en segundo plano en un servidor remoto y salir de la sesiĆ³n
ver procesos en segundo plano linux (3)
Estoy usando SSH para comenzar un proceso en segundo plano en un servidor remoto. Esto es lo que tengo en este momento:
ssh [email protected] "nohup process &"
Esto funciona, ya que el proceso comienza. Pero la sesión de SSH no termina hasta que presiono Ctrl-C.
Cuando presiono Ctrl-C, el proceso remoto continúa ejecutándose en segundo plano.
Me gustaría colocar el comando ssh en un script que pueda ejecutar localmente, por lo que me gustaría que la sesión ssh salga automáticamente una vez que el proceso remoto haya comenzado.
¿Hay una manera de hacer que esto suceda?
Cuando use nohup
, asegúrese de redirigir también stdin, stdout y stderr:
ssh user@server ''DISPLAY=:0 nohup xeyes < /dev/null > std.out 2> std.err &''
De esta forma, estará completamente separado del proceso remoto. Tenga cuidado al usar ssh -f user@host...
ya que eso solo pondrá el proceso ssh en segundo plano en el lado de la llamada . Puede verificar esto ejecutando un ps -aux | grep ssh
ps -aux | grep ssh
en la máquina que llama y esto le mostrará que la llamada ssh todavía está activa, pero solo ponga en segundo plano.
En mi ejemplo anterior, uso DISPLAY=:0
ya que xeyes es un programa X11 y quiero que se inicie en la máquina remota .
Puede usar la screen
para ejecutar su proceso en esta pantalla, separe de la pantalla Ctrl-a :detach
y salga de su sesión actual sin problema. Luego puede volver a conectarse a SSH y adjuntarlo a esta pantalla nuevamente para continuar con su tarea o verificar si ha finalizado.
O puede enviar el comando a una pantalla ya en funcionamiento. Su script local debería verse así:
ssh [email protected]
screen -dmS new_screen sh
screen -S new_screen -p 0 -X stuff $''nohup process /n''
exit
Para más información, vea este tutorial
La opción "-f" para ssh le dice a ssh que ejecute el comando remoto en el fondo y que regrese inmediatamente. P.ej,
ssh -f user@host "echo foo; sleep 5; echo bar"
Si escribe lo anterior, recibirá de inmediato el mensaje de shell, luego verá la salida "foo". Cinco segundos después verá la salida "bar". Mientras tanto, podrías haber estado usando el caparazón.