요약 : ssh에서 연결을 끊을 때 tmux 세션이 왜 종료되는지 알아 내려고합니다.
세부 사항 :
아치 리눅스 시스템에 tmux가 설치되어 있습니다. tmux 세션을 시작할 때 ssh 세션이 활성화 된 상태에서 tmux 세션을 분리 한 후 다시 연결할 수 있습니다. 그러나 ssh 세션을 종료하면 tmux 세션이 종료됩니다.
ssh 세션이 종료 된 경우에도 tmux 세션이 계속 실행되고 새 ssh 연결을 설정 한 후 tmux 세션에 연결할 수있는 다른 시스템이 있기 때문에 이것이 정상적인 동작이 아님을 알고 있습니다. 문제가있는 시스템과 올바르게 작동하는 시스템은 매우 유사한 구성을 가지고 있으므로 확인할 것이 확실하지 않습니다.
tmux 버전 1.9a를 실행 중입니다. 문제가있는 시스템 (루트 액세스 권한이있는 시스템)에는 Linux 커널 버전 3.17.4-1이 있으며 올바르게 작동하는 시스템에는 커널 버전 3.16.4-1-ARCH가 있습니다 (루트가 없습니다) 체계). 커널 버전이 문제의 원인이라고 의심합니다.
다른 사람이 비슷한 문제를 보았고 가능한 해결책을 알고 있는지 묻고 싶다고 생각했습니다.
문제를 일으키는 정확한 단계는 다음과 같습니다.
- 기계에 ssh
tmux
tmux를 시작하기 위해 실행ctrl-B D
분리 (이 시점에서 다시 연결할 수 있습니다tmux attach
- ssh 세션을 닫습니다 (이 시점에서 tmux 세션이 종료되었습니다. 다른 터미널에서 루트로 로그인했을 때 이것을 볼 수있었습니다)
- ssh와 다시 연결하고 실행
tmux attach
하면 메시지가 표시no sessions
되고 running을tmux ls
반환합니다failed to connect to server: Connection refused
. 서브가 실행되고 있지 않기 때문에 이치에 맞습니다. 이해가되지 않는 것은 ssh 세션에서 연결을 끊을 때 4 단계에서 종료되는 이유입니다.
strace 데이터 :
의견 중 하나에 응답하여 strace를 사용하여 tmux 서버 프로세스가 호출하는 시스템을 확인했습니다. tmux 프로세스가 종료되는 ssh 세션을 종료 exit
하거나 (입력 또는 사용하여 ctrl-d
) 것처럼 보입니다. 다음은 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 +++
나는 이것을 tmux가 올바르게 작동하는 다른 시스템과 비교하고 그 시스템에서 나가도 tmux 프로세스가 계속 실행됩니다. 따라서 근본 원인은 ssh 세션을 닫을 때 tmux 프로세스가 종료 된 것으로 보입니다. 이유를 파악하기 위해이 문제를 해결하는 데 약간의 시간이 필요하지만 strace 제안이 유용했기 때문에 질문을 업데이트 할 것이라고 생각했습니다.