"Después del juego es antes del juego"
Sepp Herberger

jueves, 17 de julio de 2014

No dejes para mañana lo que puedas ejecutar hoy....

El otro día tenía  que lanzar un proceso muy largo en un PC (en concreto, buscar los ficheros de mas de 100MB en una máquina concreta) y quedaba poco rato para irme a casa. Tenía varias opciones:

  1. Ejecutarlo por ssh en mi PC y dejarlo encendido hasta el día siguiente. Un poco exagerado dejar mi PC encendido sólo para eso, ¿no?.
  2. Ejecutarlo en la consola física del PC destino y dejarla abierta con la sesión del usuario root. No es una buena práctica eso de dejar sesiones de root abiertas en un PC cualquiera.
  3. Meterlo en un script y lanzarlo con el comando nohup, que permite lanzar un programa que se ejecutará aun cuando cortemos la conexión ssh. El problema su salida a pantalla se pierde en el limbo y habría que usar un fichero donde volcar la salida para ver el resultado mas tarde.
  4. Usar la utilidad screen, que me descubrió mi compañero Carlos Martín y que fué por la que me decanté y que voy a contar ahora.

Primero hay que instalar "screen" en el PC al que quiero conectarme, si no lo tenía ya. Una vez hecho, me conecto a él por ssh y hago:

 screen

Me saldrá una pantalla de información y me dirá que pulse enter o la barra espaciadora para continuar. Una vez pulsada esa tecla, nos aparecerá un prompt normal para escribir los comandos. En concreto el comando que yo quería ejecutar era:

find / -type f -size +100M

esto lanza el proceso, que puede durar mucho dependiendo del número de ficheros y tamaño del disco duro. En estas llega la hora de irme, asi que lo que hice es desconectarme de la sesión abierta por screen pulsando "CTRL-a d" (la d es de "dettach"). Con eso parece que hemos cerrado la sesión, pero no es así, el find sigue ejecutándose dentro de screen. Luego cerré la sesión ssh con exit y apagué mi PC.

Al día siguiente encendí mi PC, me conecté por ssh al PC en remoto y tecleé:

screen -ls

que nos muestra las sesiones screen que hay abiertas. Alli aparecerá la que dejamos ejecutándose el día anterior. Para reconectarme a ella usé el comando:

screen -r

y ya estaba dentro de la sesión dejada en la víspera con el find en marcha. Ya había acabado y tenía toda la salida a la vista, por lo que pude revisar el resultado en pantalla tranquilamente. Cuando tomé nota de los ficheros buscados, cerré la sesión de screen con exit. Tarea terminada.

Tres apuntes:

  • Es posible tener varias sesiones screen abiertas, cada una sobre una conexión virtual. En ese caso al hacer "screen -r" podemos indicar a que sesión queremos reconectarnos.
  • Con el comando:
screen -x

nos conectamos a una sesión a la que ya estamos conectados previamente. De esta manera podemos trabajar en la misma sesión desde dos ubicaciones, o trabajar conjuntamente con un compañero en la misma máquina viendo ambos la sesión conjuntamente como si estuviesemos sentados ante el mismo monitor y teclado, aunque realmente estemos separados por cientos de km.

  • La utilidad screen permite además trabajar con varias sesiones simutáneas, con "terminales virtuales", haciendo varias cosas a la vez en la misma máquina. Es como añadir los terminales virtuales de consola a una única sesión ssh. En la ayuda de screen vienen las combinaciones de teclas a usar para explotar esta funcionalidad.

No hay comentarios:

Publicar un comentario