Không thể gắn lại vào phiên màn hình sau khi kết nối SSH bị hủy


16

Trước đây tôi đã gắn lại với một phiên màn hình dài với screen -dr control. Tuy nhiên, đôi khi lệnh này sẽ không gắn lại vào màn hình và thay vào đó bị treo vĩnh viễn (hơn 10 phút sau đó tôi đã hủy bỏ). Điều này chỉ xảy ra khi kết nối SSH bị ngắt đột ngột chứ không phải khi màn hình được tách ra đúng cách Ctrl-A d. Các công tắc khác, chẳng hạn như screen -xhoặc screen -D -RRcũng không hoạt động.

Bài đăng này đề nghị tiêu diệt PTY giữ phiên màn hình sẽ khiến màn hình hoàn thành việc ngắt kết nối. Tuy nhiên, nó chỉ đơn giản là giết chết lớp vỏ screen -dr controlđược gọi là.

Ví dụ:

$ ps -ef | grep control | grep -v grep
nomad     7387  7109  0 13:05 pts/50   00:00:00 screen -dr control
nomad    15299     1  0 Nov27 ?        00:13:47 SCREEN -S control

$ ps -ef | grep bash | grep 'pts/50'
nomad     7109  7108  0 12:49 pts/50   00:00:00 -bash

Bài đăng được liên kết đề xuất tiêu diệt bashquá trình với PID 7109. Điều này cũng sẽ giết screen -dr controlquá trình với PID 7387. Sau đó, tôi vẫn không thể kết nối với màn hình.

Quá trình SCREEN -S controlbắt đầu phiên màn hình có initvai trò là cha mẹ của nó mà rõ ràng tôi không thể giết được.

Có cách nào để gắn lại vào phiên treo màn hình không?

Cập nhật: Điều này xảy ra trên CentOS 6.4 bằng kernel 2.6.32-358.6.1.el6.x86_64. Các shell đều là phiên bản bash 4.1.2 (1).


3
Những gì screen -lsnói trong những trường hợp "treo"? screen -d -r <session>có nghĩa là "tách ra và phục hồi" vì vậy việc không tách rời nó không phải là vấn đề quan trọng. (Và để làm điều đó thường xuyên, nó không ...)
mveroone

Hãy thử chạy lsof trên các quy trình màn hình, xem có gì "bị kẹt" không. Màn hình sử dụng một ổ cắm unix để giao tiếp giữa các quá trình, có khả năng một cái gì đó đã giữ cho nó mở. Ngoài ra, hãy đảm bảo rằng ổ cắm chưa bị xóa hoặc quyền sở hữu của nó bị thay đổi hoặc một cái gì đó. Nói chung, bạn cũng nên bao gồm những gì hệ điều hành và phiên bản bạn đang sử dụng, mặc dù tôi không có bất cứ điều gì đặc biệt trong tâm trí sẽ phụ thuộc vào os trong thời gian này.
Dan Pritts

3
Bạn có đang thông qua một bước nhảy khác không, ví dụ như sử dụng netcat làm lệnh proxy? Trong trường hợp này, tôi đã gặp sự cố khi kết nối ssh với hộp đầu tiên bị rớt, nhưng lệnh proxy netcat giữ cho kết nối ssh 'giây' mở. các -d nên làm việc tuy nhiên.
Jens Timmerman

Jens, lời khuyên của bạn đã lừa Tôi thực sự đã ủy quyền thông qua netcat và việc giết nó trên máy chủ trung gian cho phép tôi gắn lại màn hình.
Viktor Rosenfeld

Tại sao bạn muốn giết tiến trình cha của lệnh treo màn hình? Bạn muốn giết chính lệnh màn hình đính kèm. # 7387 trong trường hợp của bạn.
Matthias Urlichs

Câu trả lời:


6

Tôi nghĩ bạn nên thử

screen -DR 

lần tới cũng vậy - việc gọi (chữ hoa) tức giận sẽ buộc nó ngắt kết nối rằng phiên khác đang được giữ bởi hop netcat trung gian của bạn.


Tôi đã thử điều này, nó không hoạt động. Giết proxy netcat làm thủ thuật.
Viktor Rosenfeld

Lạ thật. Nó nên. Điều gì xảy ra thay thế?
Matthias Urlichs

Tất cả các lệnh khác của màn hình (-dr, -x, -DR) sẽ bị treo mãi mãi. Khi tôi đã giết proxy netcat, các lệnh này hoạt động trở lại.
Viktor Rosenfeld

1

Theo đề xuất của Jens Timmerman, lý do cuối cùng cho hành vi kỳ lạ này là tôi đã kết nối với máy chủ từ xa bằng SSH ProxyCommand và ncat. Sau khi giết chết ncatmáy trung gian, tôi có thể gắn lại vào phiên màn hình.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.