Guía de Screen en Ubuntu: sesiones persistentes y tareas de fondo

Fundamentos y visión general

Al administrar servidores remotos mediante SSH, cualquier interrupción en la red puede cancelar procesos críticos al cerrar la terminal abruptamente. Para resolver este inconveniente, la utilidad screen actúa como un multiplexor de terminales indispensable en entornos Ubuntu, permitiendo aislar tareas y conservarlas activas de forma indefinida. En este tutorial examinaremos paso a paso el despliegue de sesiones desacopladas, la monitorización de ejecuciones en segundo plano, la purga de sesiones huérfanas y los ajustes indispensables en el archivo de configuración para maximizar la productividad operativa.

Instalación del paquete, creación de sesiones y listado activo

Antes de manipular terminales virtuales, actualizamos los repositorios del sistema e instalamos la herramienta oficial desde los repositorios de Ubuntu:

Instalación del paquete screen en Ubuntu

Una vez concluida la descarga, verificamos la versión del binario ejecutando screen -version para constatar que el entorno cuenta con el software plenamente operativo:
⚙️ [Opciones fundamentales]

-S : Asigna un nombre personalizado a la nueva sesión para facilitar su identificación.
-ls : Enumera todas las instancias de screen existentes junto con su estado de conexión.
-d : Desvincula (Detach) la sesión actual, enviando la terminal virtual al fondo.
-m : Fuerza la creación de una nueva sesión, habitualmente combinado al iniciar procesos desatendidos.
-r : Reanuda o vuelve a vincularse (Attach) a una sesión que permanece en segundo plano.
-wipe : Elimina del registro los sockets correspondientes a sesiones caídas o inaccesibles.

Verificación de la versión instalada de screen

Para arrancar una tarea sin abrir la interfaz interactiva de la terminal, combinamos los modificadores -d y -m. Mediante el comando screen -S backup_task -d -m sleep 60, el sistema engendra directamente en segundo plano un proceso identificado bajo la etiqueta backup_task, ejecutando la instrucción de espera durante un minuto de manera totalmente transparente.

Inicio de una tarea en segundo plano con nombre de sesión

Con el fin de comprobar el inventario de sockets activos, recurrimos a screen -ls. La salida generada confirma que la sesión backup_task se encuentra vinculada a un PID específico y conservada en estado desacoplado (Detached), preparada para seguir procesando datos con independencia de nuestra sesión SSH actual.

Listado de sesiones de screen en estado desacoplado

Ejecución de tareas en segundo plano y supervisión del estado

Con el propósito de auditar la salida de un proceso desatendido, preparamos un directorio de pruebas y un fichero inicial de registro mediante el comando mkdir -p ~/screen_demo && echo '작업 준비 완료' > ~/screen_demo/task.log.

Inicialización del directorio y archivo de registro

En escenarios donde se requiere orquestar rutinas compuestas o bucles que escriban registros periódicamente, podemos delegar la ejecución a un subshell bash. Ejecutando screen -S build_job -d -m bash -c 'for i in {1..5}; do echo "진행 단계: $i" >> ~/screen_demo/task.log; sleep 1; done', establecemos la sesión build_job para anexar mensajes cada segundo en el log sin monopolizar la consola del usuario.

Ejecución de un script con bucle dentro de una sesión desatendida

Al corroborar las sesiones activas mediante screen -ls, observamos la coexistencia fluida de ambas tareas: la recién incorporada build_job y la instancia anterior backup_task, cada una operando de forma autónoma en modo Detached.

Comprobación concurrente de múltiples sesiones en ejecución

Para verificar que las iteraciones del script continúan produciendo eventos reales sin fallos, encadenamos una breve pausa con la lectura del archivo a través de sleep 2 && cat ~/screen_demo/task.log. La lectura del fichero revela cómo los eventos numéricos se han ido escribiendo de manera progresiva, ratificando el comportamiento esperado del proceso.

Inspección del archivo de registro generado en segundo plano

Terminación selectiva, depuración de sockets y limpieza de sesiones

Para poner a prueba los mecanismos de terminación remota y purga de procesos, levantamos una sesión ficticia de larga duración mediante screen -S zombie_task -d -m sleep 100. Esta orden inicia un temporizador de cien segundos bajo el identificador zombie_task.

Lanzamiento de una sesión temporal para pruebas de terminación

Una nueva consulta con screen -ls refleja el incremento en la tabla de procesos gestionados, evidenciando un total de tres entornos en segundo plano que conviven en el servidor.

Visualización de tres sesiones activas simultáneamente

Cuando surge la necesidad de interrumpir una sesión sin tener que conectarse a ella de manera interactiva, el parámetro -X permite inyectar directivas directamente en el entorno destino. Ejecutando screen -S zombie_task -X quit, transmitimos la orden de cierre para detener de raíz las tareas asociadas y liberar los recursos asignados a zombie_task.

Envío de señal de terminación remota a una sesión específica

Si un proceso se interrumpe abruptamente por fallos del sistema o caídas de red forzadas, los sockets pueden quedar huérfanos o en estado ‘Dead’. El comando screen -wipe escanea los descriptores en disco, depura las entradas inválidas y valida que únicamente los procesos verdaderamente íntegros permanezcan listados.

Limpieza de sockets obsoletos mediante screen wipe

Inspeccionando una vez más con screen -ls, confirmamos la eliminación definitiva de la sesión descartada, certificando que la tabla de terminales virtuales ha quedado saneada con las instancias operativas restantes.

Verificación final del estado limpio de las sesiones

Ampliación del historial de desplazamiento y configuración de screenrc

Para personalizar las variables de entorno predeterminadas de cada terminal virtual creada, generamos el archivo de preferencias del usuario mediante touch ~/.screenrc.

Creación del archivo de configuración screenrc

Por omisión, el historial de líneas visibles suele ser muy limitado, impidiendo revisar registros extensos. Con la instrucción echo 'defscrollback 5000' >> ~/.screenrc, incrementamos la memoria de desplazamiento (scrollback buffer) hasta 5.000 líneas para retener con holgura los mensajes emitidos por aplicaciones complejas.

Configuración del búfer de desplazamiento en screenrc

Para obtener visibilidad permanente del número de ventana, la etiqueta asignada y el hostname del equipo remoto, añadimos una barra informativa en el margen inferior mediante el comando echo 'caption always "%{= kw}%-w%{= wk}%n %t%{-}%+w = %H"' >> ~/.screenrc.

Definición de barra de estado inferior personalizada

Comprobamos la correcta adición de estas directivas ejecutando tail -n 2 ~/.screenrc. La consola muestra las dos últimas líneas del fichero, garantizando que los parámetros de memoria de terminal y barra de estado se encuentran debidamente persistidos para las próximas sesiones.

Validación de las directivas añadidas al archivo screenrc

Hemos recorrido los procedimientos clave para administrar terminales desacopladas y garantizar la continuidad de procesos en segundo plano mediante screen en Ubuntu. Esta herramienta resulta primordial para blindar tareas prolongadas en servidores remotos frente a cortes intempestivos de conectividad SSH.