Tóm tắt : Tôi đang cố gắng tìm hiểu tại sao phiên tmux của tôi chết khi tôi ngắt kết nối với ssh
Chi tiết :
Tôi đã cài đặt tmux trên hệ thống Arch Linux. Khi tôi bắt đầu một phiên tmux, tôi có thể tách ra khỏi nó và sau đó đính kèm lại trong khi phiên ssh đang hoạt động. Nhưng nếu tôi kết thúc phiên ssh của mình thì phiên tmux sẽ bị giết.
Tôi biết đây không phải là hành vi bình thường vì tôi có hệ thống khác trong đó phiên tmux tiếp tục chạy ngay cả khi phiên ssh kết thúc và tôi có thể đính kèm vào phiên tmux sau khi thiết lập kết nối ssh mới. Hệ thống có sự cố và hệ thống hoạt động chính xác có cấu hình rất giống nhau nên tôi không biết phải kiểm tra gì.
Tôi đang chạy phiên bản tmux 1.9a. Hệ thống có sự cố (mà tôi có quyền truy cập root) có phiên bản nhân Linux là 3.17.4-1 và hệ thống hoạt động đúng có phiên bản kernel 3.16.4-1-ARCH (Tôi không có quyền root hệ thống). Tôi nghi ngờ rằng phiên bản kernel là nguồn gốc của vấn đề, đó chỉ là một điểm khác biệt mà tôi nhận thấy.
Tôi nghĩ tôi sẽ hỏi xem có ai đã nhìn thấy một vấn đề tương tự và biết về một giải pháp khả thi chưa.
Các bước chính xác dẫn đến vấn đề là:
- ssh vào máy
- chạy
tmux
để bắt đầu tmux ctrl-B D
để tách ra (tại thời điểm này tôi có thể gắn lại vớitmux attach
- đóng phiên ssh (tại thời điểm này phiên tmux bị hủy, tôi đã có thể quan sát điều này khi tôi đăng nhập với quyền root trong một thiết bị đầu cuối khác)
- kết nối lại với ssh và chạy
tmux attach
và tôi nhận được thông báono sessions
và chạytmux ls
trả vềfailed to connect to server: Connection refused
. Điều này có ý nghĩa bởi vì phục vụ không chạy. Điều không có ý nghĩa với tôi là tại sao nó bị giết ở bước 4 khi tôi ngắt kết nối với phiên ssh.
dữ liệu bước:
Đáp lại một trong những ý kiến tôi đã sử dụng strace để xem những gì hệ thống gọi là quá trình máy chủ tmux tạo ra. Có vẻ như khi tôi thoát phiên ssh của mình (bằng cách gõ exit
hoặc bằng ctrl-d
) thì quá trình tmux đang bị giết. Đây là một đoạn của phần cuối cùng của đầu ra 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 +++
Tôi đã so sánh điều này với một hệ thống khác trong đó tmux hoạt động chính xác và trên hệ thống đó, quá trình tmux vẫn tiếp tục chạy ngay cả khi tôi thoát. Vì vậy, nguyên nhân gốc rễ xuất hiện là quá trình tmux đang bị chấm dứt khi tôi đóng phiên ssh. Tôi sẽ cần dành thời gian để khắc phục sự cố này để tìm hiểu lý do tại sao, nhưng tôi nghĩ rằng tôi sẽ cập nhật câu hỏi của mình vì đề xuất strace là hữu ích.