Restaurar sesión de tmux después de reiniciar

255

¿Hay alguna forma de guardar una sesión tmux? En otras palabras, si reinicio la computadora, ¿siempre perderé las sesiones?

KendallB
fuente
1
Puede hibernar en el disco como una alternativa
Mâtt Frëëman
36
Hibernar es una alternativa a dejar su computadora funcionando constantemente, no reiniciando.
chepner
55
@chepner: Hay esos días cuando*** System restart required ***
karatedog
2
@karatedog Sí, por lo que ambos estamos de acuerdo en que la hibernación no es una solución para perder su sesión tmux al reiniciar.
chepner

Respuestas:

170

Sí, si reinicia su computadora, perderá las sesiones. Las sesiones no se pueden guardar. Pero, pueden ser programados. De hecho, lo que más hace es escribir algunas sesiones para que pueda volver a crearlas. 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 muy original es "script") con tmux has-session . Comprueba el código de retorno. Si ya hay una sesión en curso con ese nombre, omite el ciclo "if" y pasa directamente a la última línea, donde se adjunta a la sesión. De lo contrario, crea una sesión y le envía algunas claves (solo ejecuta un script aleatorio por ahora). Luego sale del bloque "if" y se une.

Esta es una muestra muy trivial. Puede crear múltiples ventanas, paneles y similares antes de adjuntarlos.

Sin embargo, esto no será lo mismo que pediste. Si realiza algún cambio en la sesión, por ejemplo, cambia el nombre de una ventana y crea un nuevo panel en ella, si reinicia esos cambios, por supuesto, no se guardarán.

Hay algunas herramientas que facilitan el proceso de las sesiones de secuencias de comandos, aunque 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 Tmux "The Pragmatic Bookshelf".

Dakatine
fuente
1
no parece que eso haga nada si quiero restaurar una sesión con 5 archivos abiertos. ¿No hay forma de hacer eso?
chovy
44
Tmux no sabe nada sobre el estado de los procesos que puede haber tenido en ejecución. Puede hacer un script que tenga los mismos archivos abiertos haciendo que el comando 'send-keys' o 'split-window' sea 'vim file1 file2 file3' o busque en la administración de sesión de su editor (vim -S y similares)
bloy
¿Cuál es el propósito de la tmux send-keys ...línea?
Dominykas Mostauskis
2
@DominykasMostauskis ese comando envía pulsaciones de teclas a la sesión especificada. Es como ingresar a la sesión e ingresar esas mismas teclas desde el teclado. En este caso, envía "~ / bin / script" seguido de Enter.
Dakatine
1
la combinación some command; if [ $? != 0 ]; then .....es más fácil de escribir (y leer) como: if ! some command; then ......
fonini
117

Escribí un script bash simple que persiste en las sesiones abiertas de tmux, ventanas y directorios de trabajo actuales en cada uno.

Llámalo de forma manual o periódica desde cron (porque podrías olvidarlo):

tmux-session save

Le escribirá a ~/.tmux-session. Restaurarlos después de reiniciar así:

tmux-session restore

Esto me parece mucho mejor que una secuencia de comandos Perl de varios cientos de líneas.

mislav
fuente
¿Esto es solo si tienes una sesión tmux?
Sevenearths
86

Escribí un complemento tmux que le permite guardar el entorno tmux completo y restaurarlo más tarde. Se esfuerza por ser realmente detallado para que tenga la sensación de que nunca abandona tmux.

https://github.com/tmux-plugins/tmux-resurrect

Actualización: ahora hay un complemento tmux-continuum que realiza guardados automáticos en segundo plano del entorno tmux. Opcionalmente, también * automáticamente * restaura tmux env después del reinicio de la computadora.


fuente
Justo cuando publiqué mi "respuesta" con el mismo enlace busqué: "¡sí! Encontré esto mientras intentaba recordar cómo se llamaba su complemento.
phatskat
Este complemento no es malo, pero no restauró todos mis programas. Leerá más de sus documentos y tal vez envíe un problema en github.
Arne
@Arne Dependiendo del programa, esto puede requerir puntos de verificación del programa. En cambio, recomendaría configurar sus programas para restaurar (archivos .vimrc persistentes y posiciones de cursor para vim, etc.) y almacenar el comando tmux pane_current_command para programas como man que se pueden volver a abrir. Los puntos de control son muy complicados en mi opinión, pero vale la pena analizarlos en cualquier caso.
John P
@ bruno-sutic ¿cuál es la diferencia entre su complemento (tmux-resurrect) y tmux-coninuum?
lony
Actualmente necesitaba parchear continuum como este para que funcione github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol
10

tmuxinator es una herramienta escrita en Ruby, que podría usarse para crear y administrar sesiones tmux con facilidad. Podría usarse para crear un proyecto, que luego podría ser instanciado como una sesión tmux.

Praveen Kumar
fuente
5

Considere esta solución parcial que se encuentra aquí

El autor crea una función que guarda el historial de la sesión de tmux para mantener el estado de la sesión de tmux después de reiniciar el servidor.

Greg
fuente
17
¿Podría por favor publicar lo que dicen? Los enlaces pueden pudrirse.
cpast
1
@cpast: Esto es cierto, pero los comentarios también pueden pudrirse. Mejor dar ambos :)
danielpops
66
@greg Su enlace devuelve 404
rofrol