Resumo : Estou tentando descobrir por que minha sessão tmux morre quando eu me desconecto do ssh
Detalhes :
Eu tenho o tmux instalado em um sistema Arch Linux. Quando inicio uma sessão tmux, posso desanexá-la e, em seguida, conectar novamente enquanto a sessão ssh está ativa. Mas se eu terminar minha sessão ssh, a sessão tmux será encerrada.
Sei que esse não é o comportamento normal, porque tenho outro sistema em que a sessão tmux continua em execução, mesmo que a sessão ssh termine e posso anexar à sessão tmux após estabelecer uma nova conexão ssh. O sistema que tem um problema e o que funciona corretamente têm configurações muito semelhantes, então não tenho certeza do que verificar.
Estou executando o tmux versão 1.9a. O sistema que tem um problema (para o qual eu tenho acesso root) possui uma versão do kernel Linux 3.17.4-1 e o sistema que funciona corretamente possui a versão 3.16.4-1-ARCH do kernel (não tenho raiz nesse sistema). Duvido que a versão do kernel seja a fonte do problema, essa é apenas uma diferença que notei.
Eu pensei em pedir para ver se alguém viu um problema semelhante e sabe de uma possível solução.
As etapas precisas que levam ao problema são:
- ssh para maquinar
- corra
tmux
para iniciar o tmux ctrl-B D
para desconectar (nesse ponto eu poderia reconectar comtmux attach
- close ssh session (neste ponto a sessão do tmux está encerrada, eu pude observar isso quando estou logado como root em um terminal diferente)
- reconectar com ssh e executar
tmux attach
e eu recebo a mensagemno sessions
e executandotmux ls
retornosfailed to connect to server: Connection refused
. Isso faz sentido porque o serviço não está sendo executado. O que não faz sentido para mim é o motivo pelo qual ele é morto na etapa 4 quando eu me desconecto da sessão ssh.
dados de rastreamento:
Em resposta a um dos comentários, usei o strace para ver o que os sistemas chamam o processo do servidor tmux. Parece que, quando saio da minha sessão ssh (digitando exit
ou com ctrl-d
), o processo tmux está sendo morto. Aqui está um trecho da parte final da saída do strace.
poll([{fd=4, events=POLLIN}, {fd=11, events=POLLIN}, {fd=6, events=POLLIN}], 3, 424) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=1, si_uid=0} ---
sendto(3, "\17", 1, 0, NULL, 0) = 1
+++ killed by SIGKILL +++
Comparei isso com um sistema diferente, onde o tmux funciona corretamente e, nesse sistema, o processo do tmux continua em execução, mesmo depois que eu saio. Portanto, a causa raiz parece ser que o processo tmux está sendo finalizado quando eu fecho a sessão ssh. Precisarei dedicar algum tempo para solucionar isso para descobrir o porquê, mas pensei em atualizar minha pergunta, pois a sugestão do strace era útil.