ไม่สามารถแนบหน้าจอเซสชันอีกครั้งหลังจากการเชื่อมต่อ SSH หลุด


16

screen -dr controlฉันได้กลับคืนก่อนหน้านี้เซสชั่นหน้าจอยาวทำงานกับ อย่างไรก็ตามบางครั้งคำสั่งนี้จะไม่ติดกลับไปที่หน้าจอและแทนที่จะแขวนตลอดไป (10+ นาทีหลังจากที่ฉันยกเลิก) นี้จะเกิดขึ้นเมื่อการเชื่อมต่อ SSH Ctrl-A dจะลดลงโดยไม่คาดคิดและไม่ได้เมื่อหน้าจอถูกถอดออกอย่างถูกต้องกับ สวิตช์อื่น ๆ เช่นscreen -xหรือscreen -D -RRไม่ทำงาน

โพสต์นี้แนะนำให้ฆ่า PTY ที่เก็บเซสชั่นหน้าจอซึ่งจะทำให้หน้าจอเสร็จสิ้นการยกเลิกการเชื่อมต่อ อย่างไรก็ตามมันก็แค่ฆ่าเชลล์ที่screen -dr controlถูกเรียก

ตัวอย่างเช่น:

$ 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

โพสต์ที่เชื่อมโยงแนะนำให้ฆ่าbashกระบวนการด้วย PID 7109 ซึ่งจะเป็นการฆ่าscreen -dr controlกระบวนการด้วย PID 7387 หลังจากนั้นฉันยังคงไม่สามารถเชื่อมต่อกับหน้าจอได้

กระบวนการSCREEN -S controlที่เริ่มเซสชันของหน้าจอinitเป็นกระบวนการที่ฉันไม่สามารถฆ่าได้

มีวิธีการใส่กลับไปที่เซสชันหน้าจอที่หยุดชั่วคราวหรือไม่

อัปเดต: สิ่งนี้เกิดขึ้นกับ CentOS 6.4 โดยใช้เคอร์เนล 2.6.32-358.6.1.el6.x86_64 เชลล์เป็น bash เวอร์ชัน 4.1.2 (1) -release


3
สิ่งที่screen -lsพูดในกรณี "ห้อย" เหล่านั้น? screen -d -r <session>หมายถึง "แยกออกและกู้คืน" ดังนั้นการถอดแยกออกจากมือแรกไม่ควรสำคัญ (และสำหรับการทำมันบ่อยๆมันก็ไม่ ... )
mveroone

ลองรันคำสั่ง lsof บนหน้าจอดูว่ามีบางอย่าง "ติดอยู่" หน้าจอใช้ซ็อกเก็ตยูนิกซ์ในการสื่อสารระหว่างกระบวนการน่าจะมีบางอย่างเปิดอยู่ ตรวจสอบให้แน่ใจด้วยว่าซ็อกเก็ตไม่ได้ถูกลบหรือมีการเปลี่ยนแปลงความเป็นเจ้าของหรืออะไรบางอย่าง โดยทั่วไปแล้วคุณควรจะรวมระบบปฏิบัติการและเวอร์ชันที่คุณใช้ด้วยถึงแม้ว่าฉันจะไม่มีอะไรพิเศษในใจที่จะขึ้นอยู่กับระบบปฏิบัติการในครั้งนี้
Dan Pritts

3
คุณกำลังจะกระโดดผ่าน hop อื่นเช่นใช้ netcat เป็นคำสั่ง proxy หรือไม่? ในกรณีนี้ฉันมีปัญหาที่การเชื่อมต่อ ssh กับกล่องแรกลดลง แต่คำสั่งพร็อกซี netcat เปิดการเชื่อมต่อ 'วินาที' ไว้ -d ควรทำงานอย่างไรก็ตาม
Jens Timmerman

Jens คำแนะนำของคุณทำเคล็ดลับ ฉันทำพร็อกซี่ผ่านเน็ตแคทและฆ่ามันบนโฮสต์ระดับกลางทำให้ฉันสามารถกลับไปที่หน้าจอได้อีกครั้ง
Viktor Rosenfeld

ทำไมคุณต้องการที่จะฆ่ากระบวนการหลักของคำสั่งที่แขวนอยู่บนหน้าจอ? คุณต้องการที่จะฆ่าคำสั่งหน้าจอที่แนบมาเอง # 7387 ในกรณีของคุณ
Matthias Urlichs

คำตอบ:


6

ฉันคิดว่าคุณควรลอง

screen -DR 

ครั้งต่อไปด้วย - การร้องขอโกรธ (ตัวพิมพ์ใหญ่) ควรบังคับให้ยกเลิกการเชื่อมต่อเซสชันอื่นที่ถูกเก็บไว้โดย netcat hop ระดับกลางของคุณ


ฉันลองสิ่งนี้มันใช้งานไม่ได้ การฆ่าพร็อกซี netcat ทำเคล็ดลับ
Viktor Rosenfeld

แปลก. มันควรจะ. จะเกิดอะไรขึ้นแทน
Matthias Urlichs

การเรียกใช้หน้าจอเพิ่มเติมทั้งหมด (-dr, -x, -DR) ค้างตลอดไป เมื่อฉันฆ่าพร็อกซี netcat แล้วการเรียกใช้เหล่านี้จะทำงานอีกครั้ง
Viktor Rosenfeld

1

เป็นข้อเสนอแนะโดย Jens Timmerman เหตุผลที่ดีที่สุดสำหรับพฤติกรรมแปลกนี้คือการที่ฉันได้รับการเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลโดยใช้ SSH ProxyCommand ncatและ หลังจากที่ฆ่าncatบนเครื่องจักรระดับกลางฉันสามารถกลับไปที่หน้าจอเซสชันอีกครั้งได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.