ไม่สามารถดำเนินการต่อหน้าจอกล่าวว่าฉันได้เชื่อมต่อแล้ว?


151

ฉันกำลังทำงานบนเซิร์ฟเวอร์ Debian Jessie ระยะไกล ฉันเริ่มเซสชันหน้าจอเริ่มต้นเรียกใช้สคริปต์จากนั้นถูกตัดการเชื่อมต่อโดยเครือข่ายหมดเวลา

ตอนนี้ฉันได้เข้าสู่ระบบอีกครั้งและต้องการที่จะดำเนินการต่อเซสชั่น

นี่คือสิ่งที่ฉันเห็นเมื่อฉันแสดงหน้าจอ:

$ screen -ls
There are screens on:
    30608.pts-8.myserver    (11/03/2015 08:47:58 AM)    (Attached)
    21168.pts-0.myserver    (11/03/2015 05:29:24 AM)    (Attached)
    7006.pts-4.myserver (10/23/2015 09:05:45 AM)    (Detached)
    18228.pts-4.myserver    (10/21/2015 07:50:49 AM)    (Detached)
    17849.pts-0.myserver    (10/21/2015 07:43:53 AM)    (Detached)
5 Sockets in /var/run/screen/S-me.

ฉันดูเหมือนว่าจะแนบไปกับหน้าจอสองหน้าจอในครั้งเดียว

ตอนนี้ฉันต้องการที่จะดำเนินการต่อเซสชันที่ฉันเรียกใช้ก่อนหน้านี้เพื่อดูผลลัพธ์ของสคริปต์ของฉัน:

$ screen -r 30608.pts-8.myserver
There is a screen on:
    30608.pts-8.OpenPrescribing (11/03/2015 08:47:58 AM)    (Attached)
There is no screen to be resumed matching 30608.pts-8.myserver.

ทำไมฉันไม่สามารถแนบใหม่ได้?

ฉันมีปัญหาเดียวกันกับหน้าจออื่น:

$ screen -r 21168.pts-0.myserver
There is a screen on:
    21168.pts-0.OpenPrescribing (11/03/2015 05:29:24 AM)    (Attached)
There is no screen to be resumed matching 21168.pts-0.myserver.

คำตอบ:


242

เซสชั่นยังคงแนบมากับเทอร์มินัลอื่น เซิร์ฟเวอร์ไม่ได้ตรวจพบการขาดหายไปของเครือข่ายในการเชื่อมต่อนั้น: จะตรวจพบการหยุดทำงานเมื่อพยายามส่งแพ็กเก็ตและได้รับข้อผิดพลาดกลับมาหรือไม่มีการตอบสนองหลังจากหมดเวลา แต่สิ่งนี้ยังไม่เกิดขึ้น คุณอยู่ในสถานการณ์ทั่วไปที่ลูกค้าตรวจพบไฟดับเนื่องจากพยายามส่งอินพุตและล้มเหลว แต่เซิร์ฟเวอร์กำลังรอสัญญาณเข้า ในที่สุดเซิร์ฟเวอร์จะส่งแพ็คเก็ต keepalive และตรวจสอบว่าการเชื่อมต่อจะตาย

ในระหว่างนี้ให้ใช้-dตัวเลือกเพื่อแยกเซสชันหน้าจอออกจากเทอร์มินัลที่มีอยู่

screen -r -d 30608

screen -rd ค่อนข้างเป็นวิธีมาตรฐานในการเชื่อมต่อกับเซสชันหน้าจอที่มีอยู่


15
จะแนบไปกับเซสชั่นหน้าจอที่มีอยู่มันscreen -x, screen -rdคือการแนบไปหลังจากที่มีการถอดออกได้จากทุกสถานีมันก็ติดอยู่กับ ในกรณีของ OP ฉันต้องการยอมรับแบบหลัง แต่ในกรณีทั่วไปไม่จำเป็นต้องเป็นเช่นนั้น ฉันมักจะใช้-xRเพื่อแนบหรือสร้างหากไม่มีอะไรจะแนบ
Stéphane Chazelas

10

ตามคู่มือคุณสามารถ "ดำเนินการต่อ" เฉพาะหน้าจอเดี่ยว :

' [การจับคู่] ' ' [การจับคู่] ' อย่าเริ่มต้นหน้าจอ แต่แทนที่จะพิมพ์รายการของสตริงการระบุเซสชัน (โดยปกติจะเป็นรูปแบบ pid.tty.host; ดูที่ชื่อเซสชัน) เซสชันที่มีเครื่องหมาย 'เดี่ยว' สามารถดำเนินการต่อได้ อุปกรณ์ที่มีเครื่องหมาย 'แนบ' นั้นกำลังทำงานอยู่และมีสถานีควบคุม หากเซสชั่นทำงานในโหมดผู้ใช้หลายคนจะมีการทำเครื่องหมาย 'หลาย' เซสชันที่ทำเครื่องหมายว่า 'ไม่สามารถเข้าถึงได้' อาจอยู่บนโฮสต์อื่นหรือตายไปแล้ว เซสชันที่เข้าไม่ถึงนั้นจะถือว่าใช้งานไม่ได้เมื่อชื่อตรงกับชื่อของโฮสต์ในระบบหรือพารามิเตอร์ที่ระบุหากมี ดู-ls
-list
screen -r-rธงสำหรับคำอธิบายวิธีการสร้างการแข่งขัน ควรทำเครื่องหมายเซสชันว่า "ตายแล้ว" อย่างละเอียด สอบถามผู้ดูแลระบบของคุณหากคุณไม่แน่ใจ ลบเซสชันด้วย-wipeตัวเลือก ''

สิ่งที่คุณต้องการคือตัวเลือกนี้:

' -x'
แนบกับเซสชันที่แนบไว้ที่อื่นแล้ว (โหมดแสดงผลหลายจอ) หน้าจอปฏิเสธที่จะแนบจากภายในตัวเอง แต่เมื่อเรียงซ้อนหน้าจอหลายหน้าจอจะไม่ตรวจพบลูป ดูแล.


4
ด้วย-xเซสชั่นจะยังคงถูกแนบ 'ที่ไหนสักแห่ง' ในการรับช่วงเซสชั่นอย่างสมบูรณ์ควรใช้ -d | -D (ตัวเลือกการถอด) พร้อมกับ -r | -R (ตัวเลือกการแนบใหม่)
Andrew Kozlov

1
นั่นเป็นทางเลือก แต่อาจไม่ใช่สิ่งที่ OP ต้องการ ฉันมักจะแนบมาจากหลายสถานที่
โทมัส Dickey

4

ฉันแนบไปกับหน้าจอด้วยตัวเลือก -rD

จากคู่มือ:

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