Ripristina la sessione tmux dopo il riavvio


255

C'è un modo per salvare una sessione di tmux? In altre parole, se riavvio il computer, perderò sempre le sessioni?


1
Puoi andare in letargo su disco come alternativa
Mâtt Frëëman il

36
L'ibernazione è un'alternativa a lasciare il computer in esecuzione costantemente, non riavviare.
chepner,

5
@chepner: Ci sono quei giorni in cui*** System restart required ***
karatedog

2
@karatedog Sì, quindi concordiamo entrambi che l'ibernazione non è una soluzione per perdere la sessione di tmux al riavvio.
Chepner,

Risposte:


170

Sì, se riavvii il computer perderai le sessioni. Le sessioni non possono essere salvate. Ma possono essere scritti. Quello che la maggior parte fa in effetti è scrivere alcune sessioni in modo da poterle ricreare. Ad esempio, ecco un banale script di shell per creare una sessione:

#!/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

Ecco cosa fa. Innanzitutto, controlla se c'è già una sessione con quel nome (in questo caso, il nome originale è "script") con tmux has-session . Verifica il codice di ritorno. Se c'è già una sessione in corso con quel nome, salta il ciclo "if" e passa direttamente all'ultima riga, dove si collega alla sessione. Altrimenti, crea una sessione e vi invia alcune chiavi (per ora, eseguendo uno script casuale). Quindi esce dal blocco "if" e si attacca.

Questo è un esempio molto banale. È possibile creare più finestre, riquadri e simili prima di collegarli.

Questa non sarà la stessa cosa che hai chiesto, però. Se si apportano modifiche alla sessione, ad esempio si rinomina una finestra e si crea un nuovo riquadro al suo interno, se si riavvia tali modifiche non verranno ovviamente salvate.

Ci sono alcuni strumenti che facilitano il processo di sessioni di scripting, anche se preferisco fare le cose manualmente (penso che sia più versatile). Tali strumenti sono Tmuxinator e Teamocil .

La mia principale fonte di informazioni era il libro Tmux "The Pragmatic Bookshelf".


1
non sembra che farà nulla se voglio ripristinare una sessione con 5 file aperti. Non c'è modo di farlo?
amorevole

4
Tmux non sa nulla dello stato dei processi che potresti aver avuto in esecuzione. È possibile eseguire lo script con gli stessi file aperti facendo in modo che il comando 'send-keys' o 'split-window' sia 'vim file1 file2 file3' o esaminare la gestione della sessione dell'editor (vim -S e simili)
bloy

Qual è lo scopo della tmux send-keys ...linea?
Dominykas Mostauskis,

2
@DominykasMostauskis quel comando invia i tasti premuti alla sessione specificata. È come entrare nella sessione e inserire quei tasti dalla tastiera. In questo caso, si invia "~ / bin / script" seguito da Invio.
Dakatine,

1
la combinazione some command; if [ $? != 0 ]; then .....è più facile da scrivere (e leggere) come: if ! some command; then ......
fonini,

117

Ho scritto un semplice script bash che persiste in ogni sessione di sessioni, finestre e directory di lavoro correnti.

Chiamalo così manualmente o periodicamente da cron (perché potresti dimenticare):

tmux-session save

Scriverà a ~/.tmux-session. Ripristinali dopo il riavvio in questo modo:

tmux-session restore

Lo trovo molto meglio di una sceneggiatura Perl lunga diverse centinaia di righe.


Questo è solo se hai una sessione tmux però?
Sevenearths

86

Ho scritto un plug-in tmux che ti consente di salvare l'ambiente tmux completo e ripristinarlo in seguito. Si sforza di essere davvero dettagliato in modo da avere la sensazione di non aver mai smesso di fumare.

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

Aggiornamento: ora c'è un plugin tmux-continuum che esegue salvataggi automatici in background dell'ambiente tmux. Opzionalmente anche * automaticamente * ripristina tmux env dopo il riavvio del computer.


Proprio come ho pubblicato la mia "risposta" con lo stesso link ho cercato - "do'h!" Ho trovato questo mentre cercavo di ricordare come si chiamava il tuo plugin.
phatskat,

Questo plugin non è male, ma non ha ripristinato tutti i miei programmi. Leggerà più documenti e magari invierà un problema su github.
Arne,

@Arne A seconda del programma, questo potrebbe richiedere un checkpoint del programma. Invece, consiglierei di configurare i programmi da ripristinare - file persistenti .vimrc e posizioni del cursore per vim, ecc. - e di archiviare il comando tmux pane_current_ per programmi come man che possono essere riaperti. Il checkpoint è molto complicato secondo me, ma vale comunque la pena esaminarlo.
John P

@ bruno-sutic qual è la differenza tra il tuo plugin (tmux-resurrect) e tmux-coninuum?
lony

Al momento ho dovuto patchare il continuum in questo modo per farlo funzionare github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol il

10

tmuxinator è uno strumento scritto in Ruby, che potrebbe essere utilizzato per creare e gestire facilmente sessioni di tmux. Potrebbe essere usato per creare un progetto, che in seguito potrebbe essere istanziato come sessione tmux.


5

Considera questa soluzione parziale trovata qui

L'autore crea una funzione che salva la cronologia della sessione tmux al fine di mantenere lo stato della sessione tmux dopo il riavvio del server.


17
Potresti per favore pubblicare quello che dicono? I collegamenti possono marcire.
cpast

1
@cpast: questo è vero, ma anche i commenti possono marcire. Meglio dare entrambi :)
danielpops

6
@greg Il tuo link restituisce 404
rofrol il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.