Faça a tela GNU sobreviver à reinicialização

18

Estou usando muito a tela GNU. Acho muito irritante que toda vez que o servidor precise ser reinicializado, perco todas as minhas sessões (mesmo que eu saiba com antecedência, preciso configurar tudo novamente).

Eu procurei na web por possibilidades de como fazer a tela sobreviver a uma reinicialização, mas não encontrei nada que funcionasse para mim. Alguns dos métodos que encontrei e existem falhas:

  • CryoPID : parece estar morto, prometendo desde 2005 incluir suporte para tela
  • DMCTP : tem problemas com setuid (), não funcionou para mim (admito que não tentei muito)
  • algum script tentando recriar a sessão do zero; você ainda perde seu histórico e acho que também as variáveis ​​de ambiente não estão definidas corretamente (e quando tentei, não trouxe todas as sessões)

Talvez alguém conheça um freezer de processo melhor? Esta parece ser a maneira mais promissora.

fuenfundachtzig
fonte
Talvez você deve hibernar em vez de reiniciar :-) Lembro-me usando DMCTP um longo, longo tempo atrás e funcionou (IIRC, mas não tenho certeza ...)
preguiça
1
Bem, na maioria dos casos, suas atualizações de kernel ou substituições de hardware que forçam uma reinicialização. (O que não cabe a mim de qualquer maneira ...) - DMCTP: Estaria interessado em como fazê-lo funcionar sem recompilar a tela (conforme sugerido na Internet).
fuenfundachtzig 29/09/10
1
Estou usando o tmux em vez da tela e acho mais fácil escrever scripts de sessão. Isso não "salva" sua sessão, mas você pode facilmente enviar comandos para o tmux para fazer seu layout e enviar 'pressionamentos de tecla' para o cliente, para que você possa alterar o diretório e iniciar aplicativos, se necessário. Tenho certeza que você pode fazê-lo na tela, bem como, mas é só parece mais fácil com tmux

Respostas:

13

Não há como salvar uma sessão de tela da maneira que você deseja. O que fiz foi a próxima melhor coisa: autossh com script para conectar-me aos meus servidores e configurar meu equipamento da maneira que eu mais gosto.

Adoro.

Conexão local inativa, espero, ela volta e existe o meu trabalho (uso telas aninhadas). Servidor inoperante ou reinicializado, espero e voltei à minha posição padrão. Isso me dá a sensação de continuidade que eu desejava.

Enfim, eu fiz essa pergunta exata anos atrás na lista de telas.

Resumo: Não procure a vida eterna para a tela. Em vez disso, aprenda a ressuscitar.

Esta é a carne da configuração .screenrc:

Há um exemplo, rscreen, no pacote autossh que eu modifiquei no programa econnect.

O parâmetro --esc é definir o escape da tela remota para algo diferente (meu escape é `)

#add much much more scrollback
defscrollback 10000

# make some default windows

screen -t ADMIN     1
chdir /Users/chiggsy/Sites/
screen -t SITES    2
chdir /Users/chiggsy/src/
screen -t SRC 3
chdir
screen -t FERGUS  4 /Users/chiggsy/bin/econnect --host host.example.com --port 50000 --esc g --user sol
screen -t LAEG 5  /Users/chiggsy/bin/econnect --host host.example2.com --port 505000  --esc g --user invictus

screen -t ROOT      0   sudo su -m
chiggsy
fonte
2

Veja: http://skoneka.github.io/screen-session/

Available screen-session modes: 

---- 
save              - save Screen ( and VIM ) session 
load              - load session 
ls                - list saved sessions 
---- 

dump              - print detailed informations about windows in the session 
group             - move windows to a group 
layoutlist        - display a list of layouts 
layout-checkpoint - record a snapshot of the current layout. 
layout-history    - display saved snapshots of the current layout 
layout-redo       - load a snapshot of the current layout, 
layout-undo       - load a snapshot of the current layout, 
layout-zoom       - zoom into and out of a region 
kill              - send SIGTERM to last the process started in a window 
kill-zombie       - kill all zombie windows in the session 
kill-group        - recursively kill all windows in a group 
manager           - sessions manager (screenie like) but featuring session 
                    preview in a split window 
nest-layout       - copy a layout to the current region 
new-window        - start a new Screen window in the same working directory 
                    on the position next to the current window 
name              - get or set the sessionname 
regions           - display a number in every region (like tmux display-panes) 
renumber          - renumber windows to fill gaps 
subwindows        - recursively print windows contained in groups 
Erik Aronesty
fonte
2

Na falha do servidor, a mesma pergunta recebeu uma dica que está faltando aqui: use tmuxcom tmux-resurrect , que é:

Restaurar [s] tmuxambiente após a reinicialização do sistema.

O que ele pode restaurar para você:

  • todas as sessões, janelas, painéis e sua ordem
  • diretório de trabalho atual para cada painel
  • layouts exatos do painel nas janelas (mesmo quando ampliados)
  • sessão ativa e alternativa
  • janela ativa e alternativa para cada sessão
  • janelas com foco
  • painel ativo para cada janela
  • "sessões agrupadas" (recurso útil ao usar o tmux com vários monitores)
  • programas em execução em um painel! Mais detalhes no documento de restauração de programas .
serv-inc
fonte