Podsumowanie : Próbuję dowiedzieć się, dlaczego moja sesja tmux umiera, kiedy rozłączam się z ssh
Szczegóły :
Mam tmux zainstalowany na systemie Arch Linux. Kiedy rozpoczynam sesję tmux, mogę się od niej odłączyć, a następnie dołączyć ponownie, gdy sesja ssh jest aktywna. Ale jeśli zakończę moją sesję ssh, sesja tmux zostanie zabita.
Wiem, że to nie jest normalne zachowanie, ponieważ mam inny system, w którym sesja tmux kontynuuje działanie, nawet jeśli sesja ssh jest zakończona i mogę nawiązać połączenie z sesją tmux po ustanowieniu nowego połączenia ssh. System, który ma problem i ten, który działa poprawnie, ma bardzo podobne konfiguracje, więc nie jestem pewien, co sprawdzić.
Korzystam z wersji Tmux 1.9a. System, który ma problem (dla którego mam dostęp do roota) ma wersję jądra Linuksa 3.17.4-1, a system, który działa poprawnie, ma wersję jądra 3.16.4-1-ARCH (nie mam roota na tym system). Wątpię jednak, aby źródłem problemu była wersja jądra, zauważyłem tylko jedną różnicę.
Pomyślałem, że zapytam, czy ktoś widział podobny problem i wie o możliwym rozwiązaniu.
Dokładne kroki prowadzące do problemu to:
- ssh do maszyny
- uruchom,
tmux
aby uruchomić tmux ctrl-B D
oderwać (w tym momencie mogłem ponownie się połączyćtmux attach
- zamknij sesję ssh (w tym momencie sesja tmux została zabita, mogłem to zaobserwować, gdy jestem zalogowany jako root w innym terminalu)
- połącz się ponownie z ssh i uruchom,
tmux attach
a dostaję komunikatno sessions
itmux ls
powracamfailed to connect to server: Connection refused
. Ma to sens, ponieważ serw nie działa. Nie ma dla mnie sensu, dlaczego zostaje zabity w kroku 4, kiedy rozłączam się z sesją ssh.
dane śledzenia:
W odpowiedzi na jeden z komentarzy użyłem strace, aby zobaczyć, jakie systemy nazywają proces serwera tmux. Wygląda na to, że kiedy kończę sesję ssh (przez pisanie exit
lub za pomocą ctrl-d
), proces tmux zostaje zabity. Oto fragment końcowej części wyniku 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 +++
Porównałem to z innym systemem, w którym tmux działa poprawnie i na tym systemie proces tmux kontynuuje działanie nawet po wyjściu z niego. Wydaje się więc, że główną przyczyną jest zakończenie procesu tmux po zamknięciu sesji ssh. Będę musiał poświęcić trochę czasu na rozwiązanie tego problemu, aby dowiedzieć się, dlaczego, ale pomyślałem, że zaktualizuję moje pytanie, ponieważ sugestia śledzenia była przydatna.