GNU screen es un programa que permite gestionar varias sesiones en la línea de comandos en paralelo: permite crear terminales virtuales en la línea de comandos, visualizarlas al mismo tiempo en un mosaico, saltar de una a otra y crear varios mosaicos. Funciona como un gestor de ventanas en la línea de comandos. También sirve para lanzar un comando y dejarlo corriendo cuando se cierra la sesión.
Usar screen es muy fácil. Tiene muchas posibilidades. Aquí recojo únicamente las necesarias para abrir una sesión, desconectarse y reconectarse a ella, y finalizar la sesión.
Yo lo uso para lanzar procesos en máquinas remotas que tardan varias horas en ejecutarse. Hacer esto permite conectarse a una máquina remota, lanzar el proceso, desconectarse y dejarlo corriendo, y reconectarse más tarde para ver cómo va.
Iniciar una sesión con screen en una máquina remota
usuarios@maquina_local:~$ ssh usuario@maquina_remota usuario@maquina_remota:~$ screen -S nombre_sesion
El modificador -S permite asignar un identificador a la sesión. Es útil para volver a conectarse a esta sesión si se tienen varias sesiones screen activas.
Desconectarse de la sesión iniciada y de la máquina remota
Una vez la sesión de screen esté iniciada se pueden ejecutar las ordenes que se quieran, por ejemplo una orden que vaya a tardar varias horas en completarse. Mientras se está ejecutando la orden, es posible desconectarse de la sesión activa de screen pulsando la combinación de teclas CTRL+a d
. La sesión seguirá activa una vez que el usuario se haya desconectado de ella. En este momento podemos también cerrar la conexión ssh con la máquina remota:
usuario@maquina_remota:~$ orden Ejecutando "orden"... CTRL+a d [detached from nombre_sesion] usuario@maquina_remota:~$ exit logout Connection to maquina_remota closed. usuario@maquina_local:~$
Volver a conectarse a una sesión iniciada en la máquina remota
En cualquier momento, para ver cómo va la ejecución de la orden que se ha lanzado en la máquina remota, dentro de la sesión de screen, nos podemos volver a conectar:
usuario@maquina_local:~$ ssh usuario@maquina_remota usuario@maquina_remota:~$ screen -r nombre_sesion
Cerrar una sesión de screen
Si el trabajo en marcha dentro de la sesión de screen acabó, se puede cerrar la sesión con la combinación de teclas CTRL+a k
:
usuario@maquina_remota:~$ orden Ejecutando "orden"... La ejecución finalizó sin errores. usuario@maquina_remota:~$ CTRL+a k [screen is terminating] usuario@maquina_remota:~$ exit logout Connection to maquina_remota closed. usuario@maquina_local:~$