फिर से शुरू करने के लिए अलग स्क्रीन नहीं मिल सकती


11

मैं पोटीन का उपयोग करता हूं और एक अविश्वसनीय वायरलेस कनेक्शन है, इसलिए मैं अपने काम को चालू रखने के लिए स्क्रीन का उपयोग करता हूं। अक्सर मैं डिस्कनेक्ट हो जाता हूं, और फिर मैं अपनी स्क्रीन को रीटेट नहीं कर सकता। मैं दौड़ता हूँ screen -D -RRऔर यह वहाँ अनिश्चित काल के लिए बैठेगा। मैंने ctrl+zअपना कंसोल वापस पाने की कोशिश की है, उसके बाद ps aux | grep screenऔर फिर kill -9सभी परिणामों के लिए, और फिर screen -D -RRफिर से लेकिन मुझे वही परिणाम मिलते हैं। मैं d's और r के किसी भी संयोजन का उल्लेख करने की कोशिश करता हूं, लेकिन फिर भी यह सिर्फ वहीं बैठता है। मेरी स्क्रीन है, यह बस कुछ भी नहीं करेगा, कम से कम सभी फिर से शुरू।

मेरे स्क्रीन सत्र को फिर से शुरू करने के लिए किसी के पास कोई सुझाव या तरकीब या विचार हैं?

जवाबों:


16

मैंने इसे तब देखा है जब मैं एक सक्रिय स्क्रीन पर एक कनेक्शन छोड़ता हूं, फिर से कनेक्ट करता हूं। बग # 27462 ("मूल सत्र खो जाने पर स्टॉल को फिर से कनेक्ट करें") समस्या का वर्णन करता है जैसा कि मैं इसे देखता हूं। ऐसा प्रतीत होता है कि स्क्रीन उस tty को सूचित करने की कोशिश कर रही है जो इसे धारण करती है कि यह निकलने वाला है, लेकिन चूंकि tty एक खस्ता कनेक्शन के कारण लटका हुआ है इसलिए इसे होने वाले समय के लिए रुकना पड़ता है (जो पाँच मिनट से ऊपर है कुछ मामलों में)।

इसे ठीक करने के लिए, मैं यह करता हूं:

  • पता लगाएँ कि स्क्रीन सत्र के लिए कौन सा tty पकड़ रहा है ps -ef | grep screen | grep pty
  • लॉगिन बश ढूंढें जो उस tty से जुड़ा है ps -ef | grep bash | grep $PTY
  • उस मार को मार डालो kill -KILL $PID

यह स्क्रीन को सही तरीके से डिस्कनेक्ट करने का कारण बनता है, और आपको सामान्य रूप से पुन: कनेक्ट करने देता है।

एक उदाहरण स्क्रिप्ट के लिए यहां देखें कुछ हद तक यह स्वचालित है।


ps -ef | grep स्क्रीन | grep tty कभी भी प्रिंट नहीं करता क्योंकि ps -ef | grep स्क्रीन कभी भी स्ट्रिंग ट्टी के साथ कुछ भी नहीं लौटाती है।
डेव आरोन स्मिथ

वास्तव में उदाहरण स्क्रिप्ट चाल करने के लिए लगता है। धन्यवाद!
डेव आरोन स्मिथ

1
हाँ, मेरा मतलब 'पीटीई' था, न कि 'ट्टी'।
डेविड मैकिनटोश

2

मेरे स्क्रीन सत्रों के साथ भी ऐसा ही मुद्दा था। मैं उनका नाम लेता हूं और उन्हें बहु-उपयोगकर्ता सत्रों के रूप में सेटअप करता हूं। मैंने पाया कि यह मेरे सत्रों को सूचीबद्ध कर रहा था, लेकिन मुझे बता रहा था कि मुझे फिर से जोड़ने के लिए कोई नहीं है। फिर मैंने कोशिश की:

screen -x <session_name>

यह एक विजेता की तरह काम करता था!


1

मैं यह नहीं कह सकता कि मुझे कभी भी स्क्रीन पर वापस न आने की समस्या थी, फिर चाहे मैं किसी भी प्रकार का कनेक्शन क्यों न हो। मेरी सामान्य विधि:

ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)

ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName

1
उदाहरण के लिए स्क्रीन-लिस्ट 32322.mySession (संलग्न) देता है। तब मैं स्क्रीन -d mySession। फिर स्क्रीन -लिस्ट अभी भी 32322.mySession (संलग्न), और स्क्रीन -r mySession रिटर्न देता है। मिलान किए गए daveSession को फिर से शुरू करने के लिए कोई स्क्रीन नहीं है।
डेव आरोन स्मिथ

क्या आपने सिर्फ "स्क्रीन -d" की कोशिश की?
जेसन एंटमैन

0

क्या यह संभव है कि यह बग आपको प्रभावित कर रहा है?

http://savannah.gnu.org/bugs/?27462

क्या आप उन वर्कअराउंड को करने की कोशिश कर सकते हैं जो वे सुझाते हैं और देखते हैं कि क्या यह काम करता है?


वर्कअराउंड मेरे लिए बहुत मायने नहीं रखता था। मेरे ps -ef का आउटपुट | grep स्क्रीन उदाहरण की तरह बिल्कुल नहीं दिखता है।
डेव आरोन स्मिथ

0

सोलरसे: https://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname

0

यदि आप मेरी तरह स्मार्ट हैं, तो आप rootनियमित उपयोगकर्ता खाते के साथ शुरू किए गए स्क्रीन सत्र को फिर से शुरू करने की कोशिश कर रहे थे । ls /var/run/screenमुझे इसके लिए एक निर्देशिका दिखाने के साथ मिलाroot


0

मुझे कभी-कभी एक ही समस्या है (स्क्रीन -r -d resuming नहीं, गैर-उत्तरदायी)। ठीक करने के लिए, स्क्रीन सत्र से जुड़े टर्मिनल (ट्टी / पीटीआई) को खोजें:

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

सूचीबद्ध टर्मिनल खोजें (इस उदाहरण में pts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

उस टर्मिनल पर प्रक्रियाओं को मारें (आमतौर पर आपके शेल):

kill 12293

चला गया ps यह सुनिश्चित करने के लिए फिर से चलाएँ। अगर नहीं :

kill -9 12293

अपने सर्वर (gnu / linux) पर, मुझे कभी-कभी कई बार मरना पड़ेगा, जब तक कि वह मर न जाए।

उस tty पर सभी प्रक्रियाएं समाप्त हो जाने के बाद, स्क्रीन को सही तरीके से फिर से शुरू करना चाहिए:

screen -r -d

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