tmux anexar a sessões existentes ou criar novas

1

Estou procurando uma solução ssh / tmux que funcione assim:

  • se não houver sessão, crie uma
  • se houver uma sessão e ninguém estiver conectado a ela, crie outra

Principalmente eu quero ser capaz de criar novas sessões para o mesmo servidor, obviamente, se houver mais de uma sessão que não tenha ninguém conectado a ela, ela deve escolher a primeira.

Isso deve me permitir colocar isso como um comando padrão para conexões ssh.

Minha solução atual ssh -t 'tmux a || tmux || /bin/bash' não funciona como esperado porque, quando você tenta se conectar novamente, ela se conectará à sessão existente e, nesse caso, eu quero uma nova.

    
por sorin 16.09.2013 / 14:03

3 respostas

2

Esse é um caso de uso estranho, mas o que você precisa fazer é escrever um wrapper em torno do tmux (chamá-lo de mytmux ou algo assim) que:

  1. chama tmux ls e analisa a saída, procurando por algo que não esteja anexado
  2. anexar à primeira sessão não anexada, -OR -
  3. crie uma sessão se nenhuma sessão livre for encontrada e anexar a ela

O comando tmux ls deve retornar algo assim se houver alguma sessão:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34] (attached)

em que o campo inicial ('0') é o nome da sessão e o último campo indica se alguém está conectado a ele. Então, se ninguém estava ligado, ficaria assim:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34]

e se alguns estivessem ligados e outros não, você teria:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34] (attached)
1: 1 windows (created Mon Sep 16 21:43:30 2013) [120x34]

Se você não encontrar nenhuma sessão ou nenhuma sessão gratuita, execute tmux new para criar uma. Se você encontrar uma sessão livre, execute tmux attach -t 1 , em que '1' é o nome da sessão gratuita.

    
por 17.09.2013 / 03:47
2

Não tenho certeza desde que versão e agora você pode usar

tmux new -A -s <session-name>

The -A flag makes new-session behave like attach-session if session-name already exists

    
por 02.01.2016 / 22:00
1

Eu também precisava do recurso 'reutilizar qualquer sessão desanexada ou criar uma'. Aqui está o meu one-liner para isso (falhará miseravelmente se você usar ":" no nome da sessão):

tmux attach -t $(tmux ls | grep -v attached | head -1 | cut -f1 -d:) || tmux
    
por 21.04.2017 / 01:09

Tags