Archivo de la categoría: linux

Cómo mantener procesos en segundo plano entre distintas sesiones de terminal en Linux

¡Hola!

Para comenzar el año, os vengo con un post que no es realmente de programación, sino más bien de administrador de servidores… Pero como últimamente le doy a todo, me ha parecido interesante escribirlo 🙂

El otro día me surgió la necesidad de copiar casi un tera de información entre dos discos duros remotos. ¿cómo hacerlo? Utilizando el comando scp en modo recursivo.

Sin embargo, incluso utilizando el & para dejar el proceso en segundo plano, al desconectarme de forma accidental (se fue la luz en casa), el proceso se paró y tuve que volver a reanudar la copia.

¿Cómo solucionarlo? Existe una herramienta en Linux llamada Tmux. Esta herramienta, nos permite ejecutar varios terminales desde un solo terminal, y movernos entre ellos de forma sencilla. Y lo más interesante, es que podemos dejar un terminal ejecutando procesos, separarnos de él, cerrar nuestra sesión, volver a ella y continuar la sesión, manteniendo los trabajos, el historial del bash, la consola escrita, ETC.
En palabras del propio readme, tmux es:

tmux is a “terminal multiplexer”, it enables a number of terminals (or windows)
to be accessed and controlled from a single terminal.

tmux es un “multiplexor de terminales” que permite acceder y controlar varios terminales (o ventanas) desde una sola terminal.

Y ahora, lo más interesante: ¿cómo funciona?

  1. Antes de nada, lo instalamos:
    • Desde distribuciones basadas en Debian: aptitude install tmux
    • Desde distribuciones basadas en red hat: yum install tmux

    Si tienes otra distribución, puedes intentar encontrarla con tu gestor de paquetes, o compilarla desde el código fuente usando su repositorio git en: https://github.com/tmux/tmux.

  2. Desde una terminal, creamos una sesión escribiendo simplemente: “tmux”
  3. Ejecutamos los comandos que queramos.
  4. Una vez queramos salir de la sesión sin terminarla, escribiremos: “tmux dettach
  5. Cuando queramos retomar la sesión, miramos la lista de sesiones activas con: “tmux list-sessions”, y nos conectamos al número mostrado al principio de cada sesión, con: “tmux attach -t num, por ejemplo: tmux attach -t 0.

Aquí os pongo un ejemplo de consola para que lo veáis en acción:

root@koala [~]# tmux
root@koala [~]# pwd
/root
root@koala [~]# tar -zcf /tmp/borrar.tar.gz ./* &
[1] 6116
root@koala [~]#
root@koala [~]# tmux detach
[detached]
root@koala [~]# exit
logout
Connection to koala.tuhorizonte.es closed.
C:\Users\juanjo> 

C:\Users\juanjo>ssh root@koala.tuhorizonte.es
root@koala.tuhorizonte.es's password:
Last login: Fri Jan  1 22:46:39 2016 from xxx.xxx.xxx
root@koala [~]#root@koala [~]# tmux list-sessions
0: 1 windows (created Fri Jan  1 22:49:20 2016) [80x24] 
root@koala [~]# tmux attach -t 0
root@koala [~]# 
[1]+  Done                    tar -zcf /tmp/borrar.tar.gz ./*
root@koala [~]# cd /tmp
root@koala [/tmp]# ls -lh borrar.tar.gz
-rw-r--r--. 1 root root 4.9M Jan  1 22:49 borrar.tar.gz
root@koala [/tmp]# rm borrar.tar.gz
rm: remove regular file `borrar.tar.gz'? y
root@koala [/tmp]# exit
[exited]
root@koala [~]# exit
logout
Connection to koala.tuhorizonte.es closed. 

Para más información sobre el programa, podéis leer su manual en man tmux

¡Saludos y buen año a todos!

Entrada visitada 809 veces