Reconectar ou criar uma sessão de tela nomeada? (ou sessões de tela persistentes)

27

Basicamente, tenho uma sessão de tela remota, que desejo reconectar automaticamente. Atualmente, estou fazendo isso com o seguinte comando (como um marcador do iTerm ou um alias)

ssh host -t screen -x thesessionname

Isso funciona bem, mas se a sessão terminar por qualquer motivo, eu gostaria que ela fosse recriada na próxima conexão. A -Rbandeira para screené quase perfeita:

ssh host -t screen -R -S thesessionname

..mas se a sessão já estiver anexada, uma segunda sessão será realizada (como uma -Rsimples consulta à primeira sessão desanexada, se nenhuma for encontrada, ela criará uma nova)

Existe uma maneira de fazer o -Rsinalizador procurar sessões anexadas também e criar apenas um novo se thesessionnameele não existir?

Se isso não é facilmente possível, como eu poderia recriar automaticamente a sessão de tela quando ela morre? Talvez um script seja executado via cron que procure a sessão nomeada, criando-a, caso ela não exista?

dbr
fonte

Respostas:

32

Diga à tela para ser um pouco mais persistente ao tentar:

-D -R
    Attach here and now. In detail this means: If a session is run-
    ning,  then  reattach.  If necessary detach and logout remotely
    first.  If it was not running create it and  notify  the  user.
    This is the author's favorite.

Portanto, combine os dois e você deverá ter sua solução ("-DR" é equivalente a "-D -R"):

screen -DR <yoursession> 

Além disso, e útil saber, você pode visualizar as sessões em execução com:

screen -ls
Dan Carley
fonte
5
Perfeito, screen -x -R -S mainé o que eu acabei usando (funciona da mesma forma sem o desengate forçado), obrigado!
#
Às vezes, você deseja usar sceen -r <yoursession>um erro quando já está anexado (em vez de criar uma nova sessão).
usar o seguinte comando
11

Algumas boas opções. Primeiro, o meu favorito:

screen -x -R

Isso será anexado à primeira sessão de tela disponível (compartilhando se outra conexão estiver conectada) e, se não houver sessões de tela, inicie uma nova.

screen -d -RR

Os documentos para isso dizem "Reconecte uma sessão e, se necessário, desanexe ou crie-a. Use a primeira sessão se houver mais de uma sessão disponível". Basicamente, o double-R faz com que procure a primeira sessão a ser anexada.

screen -D -RR

"Anexe aqui e agora. O que quer que isso signifique, basta fazê-lo." Desanexará e desconectará remotamente todas as outras sessões anexadas e anexará à primeira sessão possível. Basicamente, faz o que for necessário para anexar a uma sessão existente e cria uma nova se não houver nada lá.

O primeiro (-x -R) é o menos provável de causar problemas (não desconectará sua outra conexão), mas sempre se liga a algo se houver algo a que se conectar e cria algo se não há nada a que se conectar.

freiheit
fonte
11
Essas são todas as opções úteis / úteis, mas nenhuma delas responde à pergunta original, que era (re) conectar-se a uma sessão pelo nome .
Daniel
5

eu uso

screen -dRRS sessname

Eu não quero que todo o meu login no outro shell seja eliminado, como -Dé o caso, e definitivamente não quero o modo de conexão múltipla do -x.

caos
fonte