Este post está dirigido a aquellos desarrolladores que de vez en cuando tienen que lanzar procesos largos en máquinas remotas y que desconocen tmux (o cualquier otro tipo de multiplexador de terminal).
Lo que nos interesa de tmux es la posibilidad de iniciar una sesión de shell y desconectarnos (detach) de ella para volver a recuperarla más adelante. Por ejemplo: abrir una sesión SSH, lanzar un proceso largo dentro de tmux y cerrar la conexión para, más adelante, volver a conectarnos y recuperar la sesión. Es habitual que las conexiones SSH tengan timeouts y si no estamos atentos, se cierren matando nuestros procesos y alterando nuestra presión arterial. ¡tmux al rescate!.
Un ejemplo de sesión de trabajo usando tmux podría ser así:
david@localhost $ ssh david@remotehost
david@remotehost $ tmux new-session -s big_work
david@remotehost (tmux) $ ./launch_big_work.sh
Starting BIG work. ETA 4h
# detach pulsando en el teclado [C-b] d
[detached]
david@remotehost $ exit
logout
Connection to remotehost closed.
david@localhost $
# 4 horas después...
david@localhost $ ssh david@remotehost
david@remotehost $ tmux attach -t big_work
Starting BIG work. ETA 4h.
Work done. Yay!
david@remotehost (tmux) $ exit
david@remotehost $ exit
logout
Connection to remotehost closed.
david@localhost $
No hay nada especial que hacer, solo tener instalado tmux en la máquina remota y fijarse en que la combinación de teclas
para hacer detach es Ctrl+b
y después d
, que parece lo mismo que Ctrl+b+d
pero no lo es :D
Es super práctico y no cuesta nada recordarlo. Merece la pena :)
Para ir un paso más allá, podéis tener en vuestras máquinas remotas unos alias para facilitar la gestión de sesiones. En mi caso me gusta usar estos (que son los que también uso en mi máquina local):
tmn='tmux new-session -s'
tma='tmux -2 attach -t'
tmk='tmux kill-session -t'
tml='tmux list-sessions'
Espero que os sea de ayuda. Probadlo. Os gustará :)