Restaurar sessão tmux após a reinicialização

255

Existe alguma maneira de salvar uma sessão do tmux? Em outras palavras, se eu reiniciar o computador, sempre perderei as sessões?

KendallB
fonte
1
Você pode hibernar para o disco como uma alternativa
Mâtt Frëëman
36
A hibernação é uma alternativa para deixar o computador funcionando constantemente, não para reiniciar.
chepner
5
@chepner: Há aqueles dias em que*** System restart required ***
karatedog
2
@karatedog Sim, então nós dois concordamos que a hibernação não é uma solução para perder a sessão do tmux na reinicialização.
chepner

Respostas:

170

Sim, se você reiniciar o computador, perderá as sessões. As sessões não podem ser salvas. Mas, eles podem ser roteirizados. Na verdade, o que a maioria faz é criar scripts para algumas sessões para que você possa recriá-las. Por exemplo, aqui está um shell script trivial para criar uma sessão:

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

Aqui está o que ele faz. Primeiro, ele verifica se já existe alguma sessão com esse nome (nesse caso, o nome original é "script") com o tmux has-session . Ele verifica o código de retorno. Se já houver uma sessão em andamento com esse nome, ela pula o ciclo "se" e vai direto para a última linha, onde é anexada à sessão. Caso contrário, ele cria uma sessão e envia algumas chaves para ela (apenas executando um script aleatório por enquanto). Em seguida, sai do bloco "se" e anexa.

Esta é uma amostra muito trivial. Você pode criar várias janelas, painéis e similares antes de conectar.

Isto irá não ser a mesma coisa que você pediu, no entanto. Se você fizer alguma alteração na sessão, por exemplo, renomeie uma janela e crie um novo painel nela, se você reiniciar essas alterações, é claro que não serão salvas.

Existem algumas ferramentas que facilitam o processo de sessões de script, embora eu prefira fazer as coisas manualmente (acho mais versátil). Essas ferramentas são o Tmuxinator e o Teamocil .

Minha principal fonte de informações foi o livro "The Pragmatic Bookshelf" Tmux.

Dakatine
fonte
1
não parece que isso fará qualquer coisa se eu quiser restaurar uma sessão com 5 arquivos abertos. Não tem como fazer isso?
Chovy
4
O Tmux não sabe nada sobre o estado dos processos que você pode ter executado. Você pode criar um script com os mesmos arquivos abertos com o comando 'send-keys' ou 'split-window' como 'vim file1 file2 file3' ou consultar o gerenciamento de sessões do seu editor (vim -S e similares)
bloy
Qual é o objetivo da tmux send-keys ...linha?
Dominykas Mostauskis
2
@DominykasMostauské esse comando envia pressionamentos de tecla para a sessão especificada. É como entrar na sessão e inserir essas mesmas teclas no teclado. Nesse caso, você envia "~ / bin / script" seguido de Enter.
Dakatine 16/04
1
a combinação some command; if [ $? != 0 ]; then .....é mais fácil de escrever (e ler) como: if ! some command; then ......
28817 fonini
117

Eu escrevi um script bash simples que persiste a sessões abertas do tmux, janelas e diretórios de trabalho atuais em cada uma.

Chame assim manualmente ou periodicamente a partir do cron (porque você pode esquecer):

tmux-session save

Ele irá escrever para ~/.tmux-session. Restaure-os após a reinicialização da seguinte forma:

tmux-session restore

Acho isso muito melhor do que um script Perl com várias centenas de linhas.

mislav
fonte
Isso é apenas se você tiver uma sessão tmux?
Sevenearths
86

Eu escrevi um plugin tmux que permite salvar o ambiente completo do tmux e restaurá-lo mais tarde. Ele se esforça para ser realmente detalhado, para que você tenha a sensação de nunca sair do tmux.

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

Atualização: agora existe um plugin tmux-continuum que executa salvamentos automáticos em segundo plano do ambiente tmux. Opcionalmente, ele também * automaticamente * restaura o tmux env após a reinicialização do computador.


fonte
Assim como publiquei minha "resposta" com o mesmo link que procurei - "não!" Encontrei isso ao tentar lembrar como o seu plugin foi chamado.
phatskat
Este plugin não é ruim, mas não restaurou todos os meus programas. Leia mais documentos e talvez envie um problema no github.
Arne
@ Arne Dependendo do programa, isso pode exigir um ponto de verificação do programa. Em vez disso, eu recomendaria configurar seus programas para restaurar (arquivos .vimrc persistentes e posições do cursor no vim etc.) e armazenar o comando tmux pane_current_command para programas como o homem que pode ser reaberto. Checkpointing é muito complicado na minha opinião, mas vale a pena investigar em qualquer caso.
John P
@ bruno-sutic qual é a diferença entre seu plugin (tmux-ressurrect) e tmux-coninuum?
Lony 22/08/17
Atualmente, eu precisava corrigir o continuum como este para fazê-lo funcionar github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol
10

O tmuxinator é uma ferramenta escrita em Ruby, que pode ser usada para criar e gerenciar sessões do tmux com facilidade. Poderia ser usado para criar um projeto, que posteriormente poderia ser instanciado como uma sessão tmux.

Praveen Kumar
fonte
5

Considere esta solução parcial encontrada aqui

O autor cria uma função que salva o histórico da sessão do tmux para persistir o estado da sessão do tmux após a reinicialização do servidor.

greg
fonte
17
Você poderia postar o que eles dizem? Os links podem apodrecer.
cpast
1
@ cpast: Isso é verdade, mas os comentários também podem apodrecer. Melhor para dar os dois :) #
3155
6
@greg Seu link retorna 404
rofrol 21/12/19