स्क्रीन को फिर से शुरू नहीं कर सकते, कहते हैं कि मैं पहले से ही संलग्न हूं?


151

मैं एक दूरस्थ डेबियन जेसी सर्वर पर काम कर रहा हूं। मैंने एक स्क्रीन सत्र शुरू किया है, एक स्क्रिप्ट चलाना शुरू किया है, फिर एक नेटवर्क टाइमआउट द्वारा डिस्कनेक्ट कर दिया गया है।

अब मैंने फिर से लॉग इन किया है और सत्र को फिर से शुरू करना चाहता हूं।

यह तब होता है जब मैं स्क्रीन को देखता हूं:

$ 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.

जवाबों:


241

सत्र अभी भी दूसरे टर्मिनल पर संलग्न है। सर्वर ने उस कनेक्शन पर नेटवर्क आउटेज का पता नहीं लगाया है: यह केवल उस आउटेज का पता लगाता है जब वह पैकेट भेजने की कोशिश करता है और एक टाइमआउट के बाद उसे कोई त्रुटि मिलती है या कोई प्रतिक्रिया नहीं मिलती है, लेकिन यह अभी तक नहीं हुआ है। आप एक सामान्य स्थिति में हैं, जहां ग्राहक ने आउटेज का पता लगाया क्योंकि उसने कुछ इनपुट भेजने की कोशिश की और विफल रहा, लेकिन सर्वर अभी इनपुट के इंतजार में वहां बैठा है। आखिरकार सर्वर एक रखने का पैकेट भेजेगा और पता लगाएगा कि कनेक्शन मर चुका है।

इस बीच, -dटर्मिनल से स्क्रीन सत्र को अलग करने के विकल्प का उपयोग करें जहां यह है।

screen -r -d 30608

screen -rd मौजूदा स्क्रीन सत्र से जुड़ने का मानक तरीका बहुत सुंदर है।


15
एक मौजूदा स्क्रीन सत्र के लिए संलग्न करने के लिए, यह screen -x, screen -rdसे यह अलग होने के बाद यह करने के लिए संलग्न करने के लिए है कि हर टर्मिनल यह से जुड़ा था। ओपी के मामले में, मैं सहमत हूँ कि बाद को शायद पसंद किया जाता है, लेकिन सामान्य मामले में, जरूरी नहीं है। मैं आम तौर -xRपर संलग्न करने या बनाने के लिए उपयोग करता हूं अगर संलग्न करने के लिए कुछ भी नहीं है।
स्टीफन चेज़लस 21

10

मैनुअल के अनुसार आप केवल अलग स्क्रीन को "फिर से शुरू" कर सकते हैं :

' [मैच] ' ' [मैच] ' स्क्रीन शुरू न करें, बल्कि सत्र पहचान स्ट्रिंग (आमतौर पर फॉर्म pid.tty.host; सत्र नाम देखें) की एक सूची प्रिंट करें। चिह्नित 'अलग' सत्रों को फिर से शुरू किया जा सकता है । चिह्नित 'संलग्न' चल रहे हैं और एक नियंत्रित टर्मिनल है। यदि सत्र मल्टीसर मोड में चलता है, तो इसे 'मल्टी' चिह्नित किया जाता है। 'अगम्य' के रूप में चिह्नित सत्र या तो एक अलग होस्ट पर रहते हैं या मृत हैं। एक अगम्य सत्र को मृत माना जाता है, जब इसका नाम या तो स्थानीय होस्ट या निर्दिष्ट पैरामीटर के नाम से मेल खाता है, यदि कोई हो। देखें-ls
-list
screen -r-rमैचों के निर्माण के विवरण के लिए ध्वज। 'मृत' के रूप में चिह्नित सत्रों को अच्छी तरह से जांचा और हटाया जाना चाहिए। अगर आपको यकीन नहीं है तो अपने सिस्टम एडमिनिस्ट्रेटर से पूछें। ' -wipe' विकल्प के साथ सत्र निकालें ।

आप क्या चाहते हैं यह विकल्प है:

' -x'
एक सत्र में संलग्न करें जो पहले से ही कहीं और संलग्न है (मल्टी-डिस्प्ले मोड)। स्क्रीन अपने भीतर से संलग्न होने से इंकार करती है। लेकिन जब कई स्क्रीन कैस्केडिंग करते हैं, तो लूप का पता नहीं लगाया जाता है; ख्याल रखना।


4
-xएक सत्र के साथ अभी भी 'कहीं' संलग्न किया जाएगा। सत्र को पूरी तरह से लेने के लिए -d | -D (अलग विकल्प) के साथ -r -R (-Reatt विकल्प) का उपयोग करना चाहिए।
एंड्रयू कोज़लोव

1
यह एक विकल्प है, लेकिन ऐसा नहीं हो सकता है कि ओपी को क्या चाहिए। मैं अक्सर कई स्थानों से संलग्न करता हूं।
थॉमस डिकी

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