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.
Use Nohup
para hacer que su proceso ignore la señal de suspensión:
$ Nohup long-running-process &
$ exit
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:
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.Si no ha planeado con anticipación y configuró screen
, etc., simplemente haga lo siguiente:
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
Enviar processName
al fondo con bg %1
(usando el número de trabajo que sigue al %
). Esto reanudará processName
en segundo plano.
DesconocidoprocessName
con disown %1
o disown PID
. Utilizar el -h
marque si desea mantener la propiedad hasta que finalice su Shell actual.
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.
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.
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
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.
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.
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
:
tmux
. Se abrirá una ventana en la misma terminal.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:
tmux attach
comando.Quiere terminar la sesión de tmux:
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: