Restaurar la sesión de tmux después de reiniciar
¿Hay alguna forma de guardar una sesión de tmux? En otras palabras, si reinicio el ordenador, ¿perderé siempre las sesiones?
¿Hay alguna forma de guardar una sesión de tmux? En otras palabras, si reinicio el ordenador, ¿perderé siempre las sesiones?
Sí, si reinicias tu ordenador perderás las sesiones. Las sesiones no se pueden guardar. Pero, pueden ser programadas. Lo que la mayoría hace, de hecho, es scribir algunas sesiones para poder recrearlas. Por ejemplo, aquí hay un script de shell trivial para crear una sesión:
#!/bin/zsh
SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null
if [$? != 0]
then
tmux new-session -s $SESSIONNAME -n script -d
tmux send-keys -t $SESSIONNAME "~/bin/script" C-m
fi
tmux attach -t $SESSIONNAME
Esto es lo que hace. Primero, comprueba si ya hay alguna sesión con ese nombre (en este caso, el nombre original es “script”) con tmux has-session. Comprueba el código de retorno. Si ya hay una sesión en curso con ese nombre, se salta el ciclo “if” y va directamente a la última línea, donde se adjunta a la sesión. En caso contrario, crea una sesión y le envía algunas claves (por ahora, sólo ejecuta un script aleatorio). Luego sale del bloque “if” y se conecta.
Este es un ejemplo muy trivial. Puedes crear múltiples ventanas, paneles y similares antes de adjuntar.
Esto no será lo mismo que pediste, sin embargo. Si haces algún cambio en la sesión, por ejemplo, renombras una ventana y creas un nuevo panel en ella, si reinicias esos cambios no se guardarán, por supuesto.
Hay algunas herramientas que facilitan el proceso de scripting de las sesiones, aunque yo prefiero hacer las cosas manualmente (creo que es más versátil). Esas herramientas son Tmuxinator y Teamocil .
Mi principal fuente de información fue el libro de Tmux “The Pragmatic Bookshelf”.
Escribí un simple script bash que persigue las sesiones tmux abiertas, las ventanas y los directorios de trabajo actuales en cada una.
Llámalo así manualmente o periódicamente desde cron (porque se te puede olvidar):
tmux-session save
Escribirá en ~/.tmux-session
. Restablézcalos después de reiniciar así:
tmux-session restore
Encuentro esto mucho mejor que un script Perl de varios cientos de líneas.
tmuxinator es una herramienta escrita en Ruby, que puede ser utilizada para crear y gestionar sesiones tmux con facilidad. Se puede utilizar para crear un proyecto, que luego puede ser instanciado como una sesión tmux.
Utilizo con éxito https://github.com/jimeh/tmuxifier para recrear sesiones. Esto puede ser instalado sin ruby, sólo usando git.
Los ejemplos son bastante autoexplicativos, por ejemplo https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh