Existe uma maneira de fazer uma sessão "Tela" sobreviver à reinicialização?

25

Estou usando o utilitário Screen e gostaria de preservar a sessão quando a máquina reiniciar. Se não for possível, você pode recomendar outras alternativas ao Screen que permitiriam preservar as sessões entre as reinicializações.

Estou usando o Ubuntu Server 10.04 (Lucid Lynx), se isso importa.

Tenho várias sessões abertas via Screen. Quando a máquina reinicia, todas essas sessões são perdidas e eu preciso reabri-las novamente. Eu queria encontrar uma maneira de preservar essas sessões de tela.

Sergey G
fonte
o que você está tentando fazer? você deseja preservar o histórico ou tudo o que está sendo executado na sua sessão de tela?
Marcel L
1
Fazer isso não derrotaria o objetivo de reiniciar?
21710 Brian Knoblauch
o que você quer dizer com 'sessões'? Você quer dizer que possui conexões ssh com outros hosts em várias janelas de tela? Se é isso que você quer dizer, escrever um arquivo .screenrc e especificar o usuário @ host ao qual você deseja criar o slogin devem executar o truque ..., se você tiver ativado os logins ssh sem senha. Então, quando você iniciar a tela, todas as conexões ssh serão iniciadas automaticamente. Você pode até iniciá-lo a partir do rc.local (um pouco complicado, porque você precisa iniciá-lo a partir de su - yourusername), portanto, ao fazer o login, você pode anexar novamente a sessão da tela em execução.
Natxo asenjo
1
mais importante, por que você está reiniciando o tempo todo? Servidores Unix não são servidores Windows, eles são projetados para tempos altos, sabe-se que as máquinas têm tempo de atividade de anos (sem patches de segurança do kernel). Se você reiniciar devido a patches de segurança do kernel, veja algo como o ksplice.
The Unix Janitor

Respostas:

16

Antes de tudo, vamos esclarecer algumas coisas importantes:

  1. Quantas máquinas estão envolvidas? Em outras palavras, você está se conectando a uma máquina remota ou está tudo na sua máquina local?
  2. Se houver uma máquina remota envolvida, qual máquina está reiniciando: é o servidor ou o cliente?

Se houver uma máquina envolvida ou se o servidor estiver sendo reinicializado, você ficará sem sorte.

Se você estiver efetuando login em uma máquina remota, mas precisar reinicializar sua máquina local, não há problema, desde que você esteja executando a tela na máquina remota em vez da sua máquina local. Percebo que isso é bastante óbvio para qualquer usuário experiente (até um pouco experiente) da tela, mas mencionei apenas no caso de ser útil.

Outra possibilidade (novamente, se isso é útil para você depende das circunstâncias) é executar a máquina com tela em uma VM. Suponha que seja um servidor físico remoto e precise ser reinicializado, mas ele tem um sistema operacional convidado (por exemplo) no VMware. Você pode suspender o sistema operacional convidado e iniciá-lo novamente após a reinicialização do hardware. Tudo depende do motivo pelo qual você precisa reiniciar, o que não foi especificado, e quanto controle você tem sobre a máquina e se está disposto a enfrentar todos esses problemas.

Não há solução FÁCIL, e é possível que nenhuma das soluções funcione para você. Mas boa sorte.

Se você estiver efetuando login em muitas máquinas, pode parecer muito trabalhoso executar a tela em todas as máquinas remotas separadamente, e é. Nesse caso, é útil ter uma tela intermediária em execução da máquina, que pode ter muitas janelas de tela, cada uma conectada em outra máquina remota. Enquanto a máquina intermediária permanecer em funcionamento, você poderá reiniciar sua própria máquina local (ou guardá-la na bolsa e levá-la para casa durante a noite, ou o que for) e a tela continuará sendo executada na máquina intermediária. (E, obviamente, se qualquer uma das máquinas remotas ficar inativa, você perderá a conexão com essa máquina, mas o restante das sessões de tela será bom.)

Mas é mais provável que você esteja se referindo à máquina remota ou à única máquina sendo reinicializada; nesse caso, não há uma maneira simples de fazer isso. O CryoPID parece promissor no começo, mas seu site diz que não funciona para a tela.

Mas há outra opção promissora que vale a pena explorar. (Se isso funcionará para você depende, em grande medida, exatamente do que você está tentando fazer.) Verifique isso no github.com: https://github.com/skoneka/screen-session/tree/master/ScreenSession/

iconoclasta
fonte
+1 para cryoPID, não sabia disso!
The Unix Janitor
ScreenSession parece interessante, a partir da descrição de que este é exatamente o que eu queria
Sergey G
5

Em algumas circunstâncias raras, isso é possível (consulte CryoPID ou CryoPID2 ), mas em geral isso é difícil, portanto não pode ser feito.

pjz
fonte
O link está quebrado.
kasperd
4

Em vez de usar a tela, use uma pequena VM do Virtualbox e trabalhe nela. Depois, você pode hibernar, reiniciar o host e ativar a VM novamente (como fechar e reabrir a tampa de um laptop). As conexões SSH com hosts remotos provavelmente não persistirão com esse método, acho que não seria possível garantir isso.

Gaius
fonte
Na verdade, eu gostaria de atualizar a minha resposta para tmux-ressuscitar
Gaius
O tmux-ressurrect parece uma solução muito boa.
serv-inc
4

Você não pode. Certamente não na mesma máquina

Crankyadmin
fonte
O que significa "Não posso fazer" ?
Peter Mortensen
1

Em tudo isso, a própria tela é bastante marginal. Não é a tela que você deseja "salvar", é ?, mas os ambientes nas várias sessões de tela, quaisquer que sejam.

Você parece estar sugerindo que salvar uma sessão de tela cobriria um processo SSH nela e em todos os tipos. O que está sendo executado dentro da Screen não é da conta da Screen, e essas são coisas que seriam difíceis de "salvar" ... seja lá o que isso realmente significaria se fosse implementável.

Chris Phillips
fonte