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:
- 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?.
- 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.
- 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.
- 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