Tmux o de como mantener procesos corriendo remotamente despues de la desconexion.

Encontrabame yo estrenando mi ambiente de pruebas y logeo basado en raspberris, aqui las photos.

Raspberry monitors


La idea de este setup es poder acceder al puerto debug de los dispositivos que estoy monitoreando para almacenar la informacion generada de acuerdo al set de pruebas que estoy corriendo. Todo ello desde la comodidad de mi escritorio.

La conexion a los raspberries las hago hago regularmente por PuTTY, ya accesado a los equipos abro el minicom hacia los puertos configurados (USB0 y USB1) y tengo mi centro de monitoreo remoto.


Todo iba excelentemente, mediante la opcion L del minicom realizo capturas de lo que pasa por los puertos seriales, una vez terminada la prueba cierro los archivos y tengo los logs que soportan las pruebas. Pero o sorpresa, tengo que dejar corriendo los minicom a lo largo de la noche por que hay que verificar que los equipos no hagan nada extraño en mediano plazo. Cual es el problema, al cerrar la conexion con el host remoto se detienen los procesos que esa conexion haya comenzado.

Hay varias opciones para afrontar esto, hacer un script que inicia al momento de reboot y que abra el minicom y guarde los archivos. El problema de esto seria que seria un solo archivo siempre al cual se le irian agregando los logs, lo cual me llevaria a buscar por horas la parte del log que necesito, nada practico.

Hacer un programa que corra como daemon y me permita acceder a el remotamente para decirle cuando iniciar el loggeo y el nombre del archivo. Problema no tengo tiempo ni el expertise para meterle a esto, lo que me llevaria a tardarme mas de lo necesario en hacerlo funcionar.

Siguiente opcion: un programa que deje corriendo el processo aun despues que la conexion se haya cerrado. Preguntandole al señor Google me llevo a StackOverflow y a SuperUser y en ambos sitios me tope con dos opciones Screen y Tmux.

Screen quedo descartado ya que no esta siendo soportado segun lei. Asi que la elección fue Tmux.

Accedi a los raspberries y ejecute: "$ sudo apt-get install tmux" y unos segundos despues ya estaba listo para usarse.

¿Que es lo que hace tmux?, basicamente te permite correr diferentes programas desde la misma terminal, o mandar un programa (o session) a segundo plano, que puede ser despues llamado desde otra terminal o desde la misma.

Para ello usamos el comando "$tmux" lo que crea una sesion de bash dentro de tmux ( no se si esto sea correcto paro asi parece) y lo que ejecutes ahi podra ser controlado por tmux.




Una vez que tengas corriendo el proceso el detach se hace presionando "Ctrl-B" seguido de la tecla  "D", lo que te regresa al promt original.


[detached]
pi@cocacola ~ $


Se pueden abrir varias sesiones de tmux, las cuales pueden ser listadas con el comando "tmux list-sessions", si queremos cerrar alguna ejecutamos "$tmux kill-sessions -t x" donde x sera el numero de la sesion.

pi@cocacola ~ $ tmux list-sessions
0: 1 windows (created Wed Jul  3 23:33:25 2013) [80x22]
1: 1 windows (created Wed Jul  3 23:34:17 2013) [80x18] (attached)
2: 1 windows (created Thu Jul  4 16:30:55 2013) [80x22]
pi@cocacola ~ $ tmux kill-session -t 2
pi@cocacola ~ $ tmux list-sessions
0: 1 windows (created Wed Jul  3 23:33:25 2013) [80x22]
1: 1 windows (created Wed Jul  3 23:34:17 2013) [80x18] (attached)



Para abrir una session que fue enviada a segundo plano  utilizamos:

pi@cocacola ~ $ tmux a -t 0
* puede utilizarse tambien "tmux attach-session -t 0"

O si no te gustan los numeros de session les puedes asignar un nombre con "tmux new -s myname" (cambie myname por cualquier nombre que le plazca):

pi@cocacola ~ $ tmux new -s myname
[detached]
pi@cocacola ~ $ tmux list-sessions
0: 1 windows (created Wed Jul  3 23:33:25 2013) [80x22]
1: 1 windows (created Wed Jul  3 23:34:17 2013) [80x18] (attached)
3: 1 windows (created Thu Jul  4 16:35:11 2013) [80x22]
myname: 1 windows (created Thu Jul  4 16:43:38 2013) [80x22]
pi@cocacola ~ $



Una vez familiarizado con esto puedes empezar a usar ventanas por session, lo que permite mantener dos o mas procesos corriendo en la misma session. Asi solo necesitas usar una conecion al host remoto para correr diferentes procesos y que estos queden dependientes de la misma sesion. Aqui por ejemplo detro de la sesion 0 tengo dos procesos corriendo  en dos ventanas diferentes.




Y al correr list-session me muestra la sesion abierta y que dentro de ella existen dos ventanas:

pi@cocacola ~ $ tmux list-sessions
0: 2 windows (created Wed Jul  3 23:33:25 2013) [80x22]
pi@cocacola ~ $


Bastante practico ha resultado el programa para mis fines de acceso remoto e inicio de procesos intermitentes.

@elmundoverdees

Comentarios

Entradas populares