Existe alguma maneira de salvar uma sessão do tmux? Em outras palavras, se eu reiniciar o computador, sempre perderei as sessões?
*** System restart required ***
Existe alguma maneira de salvar uma sessão do tmux? Em outras palavras, se eu reiniciar o computador, sempre perderei as sessões?
*** System restart required ***
Respostas:
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.
tmux send-keys ...
linha?
some command; if [ $? != 0 ]; then .....
é mais fácil de escrever (e ler) como: if ! some command; then .....
.
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.
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.
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.
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.
Uso com sucesso https://github.com/jimeh/tmuxifier para recriar sessões. Isso pode ser instalado sem ruby, apenas usando git.
As amostras são bastante autoexplicativas, por exemplo: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh