SSH कनेक्शन गिराए जाने के बाद स्क्रीन सत्र के लिए रीटचैट नहीं किया जा सकता


16

मैंने पहले एक लंबे समय तक चलने वाले स्क्रीन सत्र के साथ reattached किया है screen -dr control। हालाँकि, कभी-कभी यह कमांड स्क्रीन पर रीटैट नहीं करेगा और इसके बजाय हमेशा के लिए हैंग हो जाएगा (10+ मिनट के बाद जिसका मैंने गर्भपात कर दिया)। यह केवल तब होता है जब एसएसएच कनेक्शन अप्रत्याशित रूप से गिरा दिया जाता है और तब नहीं जब स्क्रीन को ठीक से अलग नहीं किया जाता है 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पीआईडी ​​7109 के साथ प्रक्रिया को मारने का सुझाव देता है। यह पीआईडी ​​7387 के साथ प्रक्रिया को भी मार screen -dr controlदेगा। बाद में, मैं अभी भी स्क्रीन से कनेक्ट नहीं कर सकता।

SCREEN -S controlस्क्रीन सत्र शुरू करने वाली प्रक्रिया initमें इसके अभिभावक के रूप में है जिसे मैं स्पष्ट रूप से नहीं मार सकता।

क्या त्रिशंकु स्क्रीन सत्र को फिर से शुरू करने का एक तरीका है?

अपडेट: यह CentOS 6.4 पर कर्नेल 2.6.32-358.6.1.el6.x86_64 का उपयोग करके होता है। सभी गोले संस्करण 4.1.2 (1) -release हैं।


3
screen -lsउन "फांसी" मामलों में क्या कहता है? screen -d -r <session>इसका अर्थ है "अलग होना और ठीक होना" इसलिए पहले हाथ न लगाने से कोई फर्क नहीं पड़ता। (और अक्सर ऐसा करने के लिए, यह नहीं है ...)
mveroone

स्क्रीन प्रक्रियाओं पर lsof चलाने की कोशिश करें, देखें कि क्या कुछ "अटक गया" है। स्क्रीन प्रक्रियाओं के बीच संवाद करने के लिए एक यूनिक्स सॉकेट का उपयोग करती है, संभावना है कि कुछ ने इसे खुला रखा है। यह भी सुनिश्चित करें कि सॉकेट हट नहीं गया है या इसका स्वामित्व बदल गया है या कुछ और। सामान्य तौर पर आपको यह भी शामिल करना चाहिए कि आप किस ओएस और संस्करण का उपयोग कर रहे हैं, हालांकि मेरे मन में ऐसा कुछ भी नहीं है जो इस बार ओएस पर निर्भर हो।
दान प्रिट्स

3
क्या आप एक और हॉप के माध्यम से ssh'ing कर रहे हैं, उदाहरण के लिए एक प्रॉक्सी कमांड के रूप में netcat का उपयोग करना? इस मामले में मुझे वह समस्या हुई है जहाँ ssh का कनेक्शन पहले बॉक्स से जुड़ता है, लेकिन netcat प्रॉक्सी कमांड 'सेकंड' ssh कनेक्शन को खुला रखता है। -d को हालांकि काम करना चाहिए।
जेन्स टिम्मरमैन

जेन्स, आपकी सलाह ने चाल चली। मैं वास्तव में netcat के माध्यम से छद्म करता था और इसे मध्यवर्ती होस्ट पर मारने से मुझे स्क्रीन पर रीटेट करने में सक्षम बनाता था।
विक्टर रोसेनफेल्ड

आप त्रिशंकु स्क्रीन कमांड की मूल प्रक्रिया को क्यों मारना चाहेंगे? आप संलग्न स्क्रीन कमांड को ही मारना चाहते हैं। # 7387 आपके मामले में।
मत्तीस उरलिच्स

जवाबों:


6

मुझे लगता है कि आपको कोशिश करनी चाहिए

screen -DR 

अगली बार भी - क्रोधित (अपरकेस) आह्वान को यह मानने के लिए बाध्य करना चाहिए कि आपके मध्यवर्ती नेटक हॉप द्वारा आयोजित किया जा रहा है।


मैंने यह कोशिश की, यह काम नहीं करता है। Netcat प्रॉक्सी को मारना ट्रिक करता है।
विक्टर रोसेनफेल्ड

अजीब। यह होना चाहिए। इसके बजाय क्या होता है?
मथायस उरलिचस

स्क्रीन के सभी और चालान (-dr; -x, -DR) हमेशा के लिए हैंग हो जाते हैं। एक बार मैंने netcat प्रॉक्सी को मार दिया है, ये इनवोकेशन फिर से काम करते हैं।
विक्टर रोसेनफेल्ड

1

जेन्स टिमरमैन द्वारा सुझाए गए अनुसार, इस अजीब व्यवहार का अंतिम कारण यह था कि मैं SSH ProxyCommand और का उपयोग कर रिमोट सर्वर से जुड़ रहा था ncatncatइंटरमीडिएट मशीन पर मारने के बाद , मैं स्क्रीन सत्र को रीटच करने में सक्षम हूं।


-2

यदि यह एक बार-बार जारी किया जाने वाला मुद्दा है, तो आप mosh को ssh रिप्लेसमेंट के रूप में उपयोग करने पर भी विचार कर सकते हैं:

http://mosh.mit.edu

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.