it-swarm-es.tech

Mantenga los procesos en ejecución después de que la sesión SSH se desconecte

A veces tengo procesos de larga ejecución que quiero iniciar antes de volver a casa, así que creo una sesión SSH en el servidor para iniciar el proceso, pero luego quiero cerrar mi computadora portátil y volver a casa y más tarde, después de la cena, quiero Verifique el proceso que comencé antes de dejar el trabajo. ¿Cómo puedo hacer eso con SSH? Tengo entendido que si interrumpe su conexión SSH, también interrumpirá su sesión de inicio de sesión en el servidor, lo que anulará el largo proceso de ejecución.

216
λ Jonas Gorauskas

Use Nohup para hacer que su proceso ignore la señal de suspensión:

$ Nohup long-running-process &
$ exit
217
Warren Young

Desea utilizar la pantalla GNU. ¡Es súper increíble!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d para desconectarse de su sesión de pantalla

exit                 #disconnect from the server, while run-a-long-process continues

Cuando regrese a su computadora portátil:

ssh [email protected]
screen -r            #resume the screen session

¡Entonces mira el progreso de tu largo proceso!

screen es una herramienta muy completa y puede hacer mucho más de lo que he descrito. Mientras está en una sesión de pantalla, intente ctrl + a ,? para aprender algunos comandos comunes. Probablemente los más comunes son:

  • CTRL+a , c para crear una nueva ventana
  • CTRL+a , n para cambiar a la siguiente ventana en su sesión de pantalla
  • CTRL+a , p para cambiar a la ventana anterior en su sesión de pantalla
  • si inicia sesión desde un grupo de sistemas diferentes, es posible que se haya quedado conectado accidentalmente a una sesión de pantalla activa en una computadora diferente. por esa razón, siempre reanudo con screen -d -r para asegurarse de que si hay otro Shell conectado a mi sesión de pantalla, se desconectará antes de reanudarlo en mi sistema actual.
143
Sandy

Si no ha planeado con anticipación y configuró screen, etc., simplemente haga lo siguiente:

  1. Si su proceso se ejecuta en segundo plano: goto # 3, de lo contrario: Ctrl-Z para suspender el proceso en primer plano. Esto informará el número de trabajo del proceso suspendido, por ejemplo:

    [1]+  Stopped                 processName
    
  2. Enviar processName al fondo con bg %1 (usando el número de trabajo que sigue al %). Esto reanudará processName en segundo plano.

  3. DesconocidoprocessName con disown %1 o disown PID. Utilizar el -h marque si desea mantener la propiedad hasta que finalice su Shell actual.

42
Mike Covington

Lo que desea usar es la pantalla o, mejor aún, una envoltura alrededor de la pantalla fácil de usar llamada byobu.

Screen le permite ejecutar múltiples sesiones de terminal virtual en la misma sesión ssh. A tutorial y páginas de ayuda están disponibles.

byob es un contenedor que permite abrir fácilmente nuevas pantallas con una simple tecla de función en lugar de la combinación de teclas de ctrl-a. También muestra una línea de estado con todos los terminales virtuales abiertos que se pueden nombrar.

Otra característica interesante es el hecho de que toda su pantalla puede permanecer activa mientras su conexión ssh está desconectada. Simplemente se conecta de nuevo a través de ssh y llama a byobu y todo es como antes.

Por fin algunos capturas de pantalla de byobu.

15
txwikinger

Vale la pena señalar que

ssh -t lala screen -rxU moo se adjuntará a la sesión moo en el Host lala

ssh -t lala screen -S moo creará la sesión moo en el Host lala

y

ssh -t lala screen -S moo quux creará la sesión moo en el Host lala y ejecutará el programa quux, cerrando la sesión al finalizar.

9
cjac

Puede encontrar una buena guía aquí: Mantenga su sesión SSH ejecutándose cuando se desconecte

Sudo apt-get install screen

Ahora puede comenzar una nueva sesión de pantalla simplemente escribiendo screen en la línea de comando. Se le mostrará información sobre la pantalla. Presiona Intro y estarás en un mensaje normal.

Para desconectar (pero dejar la sesión en ejecución) Hit Ctrl + A y entonces Ctrl + D en sucesión inmediata. Verá el mensaje [separado]

Para volver a conectarse a una sesión que ya se está ejecutando

screen -r

Para volver a conectarse a una sesión existente, o crear una nueva si no existe

screen -D -r

Para crear una nueva ventana dentro de una sesión de pantalla en ejecución Hit Ctrl + A y entonces C en sucesión inmediata. Verá un nuevo mensaje.

Para cambiar de una ventana de pantalla a otra Presiona Ctrl + A y entonces Ctrl + A en sucesión inmediata.

Para enumerar ventanas de pantalla abierta Presiona Ctrl + A y entonces W en sucesión inmediata

4

Antigua pregunta, extraña aún, nadie aconsejó tmux , que actúa como una envoltura para n consolas y las mantiene abiertas hasta que sea necesario. Esto permite un mayor control, además de una serie de funciones que tiene tmux. Es fácil de administrar, solo ejecuta tmux, que lo trae en su Shell, inicia su trabajo, luego presiona ctrl + b seguido de d (detach) (ctrl+b es el "ok google" de tmux, y d es el comando para cerrar sin salir del Shell). Esto realmente funciona si solo cierra, por ejemplo, PuTTY. Después de la cena, cuando vuelvas a conectarte, puedes volver a abrir tmux con tmux attach para ver su pantalla exactamente como la dejó. Algo que me encanta es el panel de división: ctrl+b y luego presione ". Para cambiar de un panel a otro, ctrl+b y luego presione la flecha arriba/abajo.

4
nnsense

Uso NX NoMachine, que es gratis para mí porque solo soy yo. Básicamente, ejecuta una sesión X en el servidor con la que puede conectarse y desconectarse una y otra vez. La sesión X sigue ejecutándose cuando no estás conectado. Las conexiones se pueden hacer desde cualquier lugar. Puede elegir entre ventanas flotantes o una sola ventana que contenga un escritorio completo (por ejemplo, un escritorio Gnome completo). El cliente (que ejecutaría en su computadora portátil) puede ejecutarse en Linux, MacOS, Solaris o Microsoft Windows. En el último caso, si elige ventanas flotantes, aparecerán individualmente en la barra de tareas de Windows.

Utilizo mi computadora portátil Windows XP laptop (que necesito para cierto hardware específico de Windows que tengo) como interfaz para mis dos servidores Linux que usan NX Nomachine. Incluso puedo imprimir en la impresora conectada a mi portátil con Windows de Linux.

2
Rob_before_edits

Tmux es una buena opción disponible para ejecutar sus procesos de larga ejecución en segundo plano.

Tengo que seguir ejecutando los procesos de larga duración en una plataforma en la nube de Google VM instancia/servidor (con SO: Ubuntu 16.0). Donde tengo que iniciar el terminal SSH y desde el terminal, tengo para mantener el terminal conectado para ejecutar el proceso. Ahora, hasta ahora, todo está bien. Pero espere si la conexión con mi terminal SSH se termina, los procesos de larga duración se detienen inmediatamente y, por lo tanto, tengo que volver a ejecutarlos una vez más el terminal ssh se reinicia o desde un nuevo terminal ssh.

Encuentro que tmux es la buena solución para evitar la finalización de los procesos que queremos ejecutar incluso después de cerrar el terminal.

Terminal Multiplexor (tmux) para iniciar la sesión tmux:

  1. Inicie la terminal ssh
  2. Escriba tmux. Se abrirá una ventana en la misma terminal.
  3. Ejecute el comando para iniciar procesos de ejecución prolongada en la sesión tmux.

Ahora, incluso si el terminal SSH se cierra/termina de repente, la sesión de tmux seguirá ejecutando los procesos iniciados de larga duración en la instancia/servidor.

Si la conexión terminó, entonces, cómo volver a conectarla para ver los procesos que se ejecutan en la sesión de tmux en segundo plano:

  1. reconecte o abra la nueva terminal ssh. Para ver este proceso (que se sigue ejecutando en segundo plano), escriba: tmux attach comando.

Quiere terminar la sesión de tmux:

  1. Detén el proceso. Luego escriba exit en tmux-terminal-window.

(Tenga en cuenta que: si usamos tmux detach comando: saldrá de la ventana/terminal de la sesión tmux sin terminar/detener las sesiones tmux)

Para más detalles, consulte el siguiente artículo:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/
1
Yogesh