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


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


212


origem


Você pode hibernar para o disco como uma alternativa - Mâtt Frëëman
A hibernação é uma alternativa para deixar seu computador funcionando constantemente, sem reinicializar. - chepner
@chepner: Há aqueles dias em que *** System restart required *** - karatedog
@karatedog Sim, então ambos concordamos que a hibernação não é uma solução para perder sua sessão do tmux na reinicialização. - chepner


Respostas:


Sim, se você reiniciar seu computador, perderá as sessões. Sessões não podem ser salvas. Mas eles podem ser roteirizados. O que a maioria faz de fato é roteiro algumas sessões para que você possa recriá-las. Por exemplo, aqui está um script de shell 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

Veja o que isso faz. Primeiro, verifica se já existe alguma sessão com esse nome (neste caso, o nome original é "script") com tmux has-session. Ele verifica o código de retorno. Se já existe uma sessão com esse nome, ele pula o ciclo "if" e vai direto para a última linha, onde é anexado à 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 é anexado.

Isto é um muito amostra trivial. Você pode criar várias janelas, painéis e semelhantes antes de anexar.

Isso vai não ser a mesma coisa que você pediu, no entanto. Se você fizer alguma alteração na sessão, por exemplo, renomear uma janela e criar um novo painel, se você reiniciar essas mudanças, obviamente 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 que é mais versátil). Essas ferramentas são Tuxinador e Teamocil.

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


140



Não parece que vai fazer nada se eu quiser restaurar uma sessão com 5 arquivos abertos. Não tem como fazer isso? - chovy
O Tmux não sabe nada sobre o estado dos processos que você pode ter tido em execução. Você poderia roteiro tendo o mesmo arquivos abertos com o comando 'send-keys' ou 'split-window' seja 'vim file1 file2 file3' ou examine o gerenciamento de sessão do seu editor (vim -S e similares) - bloy
Qual é o propósito do tmux send-keys ... linha? - Dominykas Mostauskis
@DominykasMostauskis esse comando envia pressiona a tecla para a sessão especificada. É como entrar na sessão e inserir essas mesmas teclas no teclado. Neste caso, você envia "~ / bin / script" seguido por Enter. - Dakatine
posso fazer o script fazer login ssh com nome de usuário e passar? (Eu sei que não é seguro só quero saber se é possível para sistemas onde eu não me importo com a segurança, mas ainda tem que ter usuário e passar). - Jas


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

Chame-o assim manualmente ou periodicamente do cron (porque você pode esquecer):

tmux-session save

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

tmux-session restore

Eu acho isso muito melhor do que um script Perl de várias centenas de linhas.


100





Eu escrevi um plugin tmux que permite salvar o ambiente tmux completo 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 há um tmux-continuum plug-in que executa salvamentos em segundo plano automáticos do ambiente tmux. Opcionalmente, ele também * automaticamente * restaura o env tmux após a reinicialização do computador.


66



Assim como eu postei minha "resposta" com o mesmo link, olhei para cima - "do'h!" Achei isso ao tentar lembrar o que seu plugin foi chamado. - phatskat
Este plugin não é ruim, mas não restaurou todos os meus programas. Vai ler mais sobre seus documentos e, talvez, enviar um problema no github. - Arne
@Arne Dependendo do programa, isso pode exigir uma verificação do programa. Em vez disso, eu recomendaria configurar seus programas para restaurar - arquivos .vimrc persistentes e posições do cursor para o vim, etc. - e armazenar o tmux pane_current_command para programas como man que podem ser reabertos. 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


tmuxinador é 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 mais tarde poderia ser instanciado como uma sessão tmux.


10





Considere esta solução parcial encontrada Aqui

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


5



Você poderia por favor postar o que eles dizem? Links podem apodrecer. - cpast
@cpast: Isso é verdade, mas os comentários também podem apodrecer. Melhor para dar a ambos :) - danielpops