garanta que todas as sessões tmux terminem quando a sessão SSH terminar

0
Primeiro, antecipar a confusão: é, de fato, perguntar o contrário da sua corrida da questão tmux do moinho.

Como se pode garantir que, se o túnel SSH morrer, nenhuma sessão do tmux vazou em tudo. Ao executar múltiplos shells sobre o mesmo Sessão SSH, encerrando a sessão e a instância do tmux de forma limpa em um terminal ainda causará instâncias do tmux em outros terminais vazar. Isso pode causar todos os tipos de problemas se e. g. um esqueci para encerrar um processo de consumo de recursos que permaneceu oculto em algum painel de fundo. Não é legal.

Estou usando o tmux quase exclusivamente como emulador de terminal e tenho pouco uso, se houver, para o seu recurso de “desanexar”. Não é incomum que Eu tenho várias instâncias tmux em terminais acessando o mesmo máquina em uma única sessão SSH. Se eu quiser executar um plano de fundo processo, peço o shell para disown ou executá-lo em systemd. Infelizmente, muitos sistemas com os quais estou trabalhando no dia a dia ainda não atualizou para o systemd e é improvável que faça isso o futuro próximo, então KillUserProcesses não é uma opção.

O ideal é que eu invoque o tmux com alguma opção de linha de comando impede que ele seja executado em segundo plano para que eu possa alias para tmux .

What SSH tunnels?

Uma conexão OpenSSH que atende a várias sessões.

What tmux session?

Instâncias do tmux separadas, uma por sessão SSH.

What leaks?

Vazamentos de instâncias do tmux. Como em: SSH em uma máquina. Inicie outra sessão de shell sobre a mesma conexão. Inicie uma instância do tmux em cada sessão do SSH. Você agora tem duas instâncias do tmux. Pare o tmux em uma sessão ( <C-d> ); então pare o SSH conexão (novamente <C-d> ): A outra sessão SSH é fechada, mas a instância do tmux correndo dentro dele é vazado com todos os processos que ela criança.

Please describe: (1) what setup you have now,

Stock OpenSSH, estoque tmux, algum shell. Principalmente conexões SSH reversas que não posso restabelecer à vontade, mas isso não deve importar.

and (2) what scenario you're trying to prevent.

Processa permanecer vivo na outra sessão do tmux.

Note que essas são caixas diferentes em que o SSH está inserido, então o objetivo é impedir que até mesmo uma única instância do tmux permaneça viva depois que a conexão morre. Além disso, desde que eu uso painéis divididos e janelas com fundo pesado, eu realmente desejo para toda a criança processos a serem coletados.

    
por user230251 07.05.2017 / 16:19

2 respostas

2

Ao fazer login com a nova ssh session, você pode usar algo como tmux attach -d || tmux new para anexar qualquer sessão tmux existente ou criar uma nova sessão se não houver sessões tmux . Embora isso não evite que tmux sessão seja executada em segundo plano se você perder ssh de conexão, isso impedirá que essas sessões abandonadas se acumulem.

    
por 07.05.2017 / 19:10
1

Acredito que seu problema pode ser totalmente evitado usando Mosh .

Mosh suporta conectividade intermitente e só vaza mosh-server instâncias se você não se desconectar corretamente (como fechar o cliente com força enquanto estiver desconectado do servidor).

    
por 13.12.2017 / 12:54