वियोग के बाद एक शेल कैसे पुनर्प्राप्त करें


37

एक दूरस्थ CentOS 5.6 मशीन पर कुछ काम कर रहा हूँ और मेरा नेटवर्क गिरता रहता है। क्या कोई ऐसा तरीका है जिससे मैं दोबारा जुड़ने के बाद अपने त्रिशंकु सत्रों को पुनर्प्राप्त कर सकता हूं?

संपादित करें: कुछ अपडेट कर रहा है और यम के साथ इंस्टॉल कर रहा है और चिंतित हूं कि यह एक समस्या हो सकती है यदि प्रक्रियाएं जो कुछ भी कर रही हैं उसके बीच में लटकाए रखें।


6
tmux या स्क्रीन।
सेह

जवाबों:


63

कोई तरीका नहीं है, लेकिन इसे रोकने के लिए मुझे उपयोग करना पसंद है tmux। मैं tmux शुरू करता हूं, ऑपरेशन शुरू करता हूं और अपने रास्ते पर जाता हूं। यदि मैं वापस लौटता हूं और पाता हूं कि कनेक्शन टूट गया है, तो मुझे बस फिर से कनेक्ट करना होगा और टाइप करना होगा tmux attach

यहाँ एक उदाहरण है।

$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0
Back in the tmux sesion

tmux नहीं है, और मुझे सूची में नहीं करने के लिए चीजों को स्थापित करने की अनुमति नहीं है ...

5
@sergio मेरा दिल बहता है :-)) उपयोग करें screen

4
@sergio एक यूनिक्स प्रणाली पर, वस्तुतः कोई भी एप्लिकेशन जिसे चलाने के लिए रूट अनुमतियों की आवश्यकता नहीं होती है, उन्हें होम डायरेक्टरी में स्थापित किया जा सकता है।
Kusalananda

35

Tmux और स्क्रीन के लिए सिफारिशें दोनों अच्छे सुझाव हैं। वे आपके प्रश्न का उत्तर देते हैं, लेकिन वास्तव में यह नहीं बताते हैं। प्रश्न का उत्तर है: कोई रास्ता नहीं है। यदि आप ssh के माध्यम से लॉगिन करते हैं, तो कनेक्शन समाप्त होने पर शेल समाप्त हो जाता है। कार्य के आसपास लॉगिन और तुरंत किसी तरह का वर्चुअल टर्मिनल शुरू करना है (जैसे कि tmux)। जब कनेक्शन गिरता है, तो आप जिस शेल में हैं, वह समाप्त हो गया है, लेकिन आप एक नया शेल खोल सकते हैं और वर्चुअल टर्मिनल को फिर से कनेक्ट कर सकते हैं (यह शेल चला रहा है जिसमें आप वास्तव में अपना काम कर रहे हैं।)


ठीक है। अब यह स्पष्ट है।

यह मानते हुए कि यम प्रक्रिया अभी भी चलती है (शेल के ठीक होने पर तुरंत समाप्त नहीं हुई), पुनरावृत्ति या इसी तरह की प्रक्रिया को पुनर्प्राप्त करने के लिए पर्याप्त हो सकती है - या - जो भविष्य के किसी भी आउटपुट को प्राप्त करता है। खोल आमतौर पर डिस्कनेक्ट पर समाप्त हो जाएगा, हालांकि।
Eroen

@ यदि आपका मतलब है, यहां तक ​​कि tmux का उपयोग करते हुए भी, OS एक बार tmux प्रक्रिया को समाप्त कर देगा, जब यह पता चलेगा कि कनेक्शन खो गया है?
डोजो

@Dojo जब कनेक्शन समाप्त हो जाता है, तो tmux का उदाहरण बंद हो जाएगा, लेकिन tmux सेशन (और इसे प्रबंधित करने वाले गोले) ऊपर रहेगा।
विलियम पर्ससेल

यदि उपयोगकर्ता ने दूरस्थ ssh सर्वर से कनेक्शन खो दिया है क्योंकि उदाहरण के लिए उसने गलती से RJ-45 केबल को अनप्लग कर दिया है, मुझे लगता है कि ssh सर्वर अभी भी इस सत्र को पूर्वनिर्धारित समयबाह्य (उदाहरण के लिए 120 सेकंड) तक रखता है। तो इस मामले में, क्या इस सत्र को फिर से शुरू करने का एक तरीका है जो केबल अनियंत्रित होने के बाद भी 120 सेकंड के भीतर ssh सर्वर साइड पर जीवित है?
गाब :

8

जैसा कि विलियम ने कहा, संक्षिप्त उत्तर नहीं है, कोई रास्ता नहीं है। इससे बचने के लिए आप कनेक्शन खोने से पहले स्क्रीन कमांड का उपयोग कर सकते हैं


मैं जो समझता हूं, उससे मुझे स्क्रीन के साथ यम की शुरुआत करनी होगी ... वेल, आई डोंट। मैं यह फिर भी इस्तेमाल किया जा रहा है और मैं इसे मारने के लिए मजबूर करने के लिए नहीं करना चाहता है कह सकते हैं। .. कैसे मैं चल रहे यम का नियंत्रण हासिल कर सकता हूं?

और बायोबू स्क्रीन के लिए एक अच्छा पूरक है, इसे स्वचालित रूप से एक अच्छा ग्राफिकल टर्मिनल लॉन्चपैड.

जहां तक ​​मुझे पता है कि आप नहीं कर सकते, जब तक कि आपके मौजूदा टर्म सेशन में yum कमांड से आउटपुट रिडायरेक्ट करने का कोई छिपा हुआ तरीका नहीं है, लेकिन मैं अपने सिर के ऊपर से एक के बारे में नहीं सोच सकता।
निकोलस स्मिथ

डीबगर और सी का उपयोग करते हुए इसके लिए कई आंशिक समाधान हैं। प्रक्रिया को एक नया मूल शैल देने के लिए। रेप्टियर एक है, और एक ब्लॉग पोस्ट समस्या, वर्कअराउंड और कुछ अन्य कार्यान्वयन का वर्णन करता है।
Eroen

3

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

इसे प्राप्त करने के लिए, "नॉहुप" और "डिसऑन" कमांड का उपयोग करें, जो आमतौर पर अधिकांश शेल पर निर्मित कमांड होते हैं, अर्थात आपको कुछ भी स्थापित करने की आवश्यकता नहीं है। यह केवल गैर-इंटरैक्टिव कमांड के लिए काम करता है।

इसलिए, चरण इस प्रकार होंगे:

  1. सर्वर पर लॉगिन करें
  2. अपना आदेश चलाएँ: "nohup sudo yum update &" (यह आपके वर्तमान निर्देशिका में nohup.out फ़ाइल में सभी आउटपुट को लॉग करेगा)
  3. "% 1 को भंग करें" चलाएं
  4. इस बिंदु पर डिस्कनेक्ट करने के लिए स्वतंत्र महसूस करें या डिस्कनेक्ट होने की प्रतीक्षा करें :)

जब आप सर्वर पर वापस आते हैं, तो कमांड को कैसे करना है, यह देखने के लिए बस "पूंछ nohup.out"।


क्या यह सामान्य मामले में बहुत खराब काम नहीं होगा ? उदाहरण के लिए, उन कमांड्स के साथ जो एक समय या किसी अन्य पर इनपुट चाहते हैं ... पूरी तरह से गैर-संवादात्मक आदेशों के लिए, यह पर्याप्त रूप से काम कर सकता है और टर्मिनल मल्टीप्लेकर (और संभवतः स्थापित करने की आवश्यकता है) के ओवरहेड से बच सकता है।
बजे एक सीवी

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

बिल्कुल, यह एक वैध उत्तर है, बस इसके संभावित उपयोग के मामलों में थोड़ा सीमित है। संपादन के साथ अपग्रेड किया गया।
बजे एक सीवी

3

किसी ने एक जवाब के बजाय एक टिप्पणी में पुनरावृत्ति जोड़ा, इसलिए मैं इसे बढ़ा नहीं सकता, लेकिन यह संपादित प्रश्न का एक अच्छा जवाब लगता है और CentOS पर बहुत अच्छा काम किया है।

देखें: https://github.com/nelhage/reptyr https://www.ostechnix.com/reptyr-move-running-process-new-terminal/

क्या कोई ऐसा तरीका है जिससे मैं दोबारा जुड़ने के बाद अपने त्रिशंकु सत्रों को पुनर्प्राप्त कर सकता हूं?

संपादित करें: कुछ अपडेट कर रहा है और यम के साथ इंस्टॉल कर रहा है और चिंतित हूं कि यह एक समस्या हो सकती है यदि प्रक्रियाएं जो कुछ भी कर रही हैं उसके बीच में लटकाए रखें।

एक ही बात है, मैं एक यम अद्यतन सत्र के लिए दूरस्थ कनेक्शन खो दिया है। इसलिए मैंने इस प्रश्न को खोजा और पाया ... फिर इस बार स्क्रीन को फिर से जोड़ा और उपयोग किया:

  1. फिर से कनेक्ट करें
  2. स्क्रीन
  3. ऊपर दिए गए लिंक के अनुसार reptyr स्थापित करें
  4. ps -a | ग्रीप यम
  5. रेप्टियर psid

और वहाँ मैं बरामद प्रॉम्प्ट पर हूँ जो कुछ घंटे पहले यम दे रहा था।

तकनीकी रूप से उत्तर सभी सही हैं, यह त्रिशंकु सत्र की वसूली नहीं है, यह वर्तमान सत्र के लिए एक अनाथ प्रक्रिया की पुनर्संरचना है। और बहुत उपयोगी यह भी है ...


1

जैसा कि कई लोगों ने सुझाव दिया है screenऔर tmux, वे दोनों बुनियादी कार्यक्षमता का समर्थन करते हैं, लेकिन विशिष्ट विशिष्ट विशेषताएं हैं, इसलिए कोई यह नहीं कह सकता है कि सभी मामलों में एक दूसरे से बेहतर है। उदाहरण के लिए, केवल tmux विंडो-स्प्लिटिंग का समर्थन करता है , जबकि केवल GNU स्क्रीन (Ctrl + ar) के साथ लंबी लाइन लपेटकर टॉगल कर सकती है । अधिक विस्तृत तुलना यहाँ देखें ।

Ssh की इस समस्या को ठीक करने के लिए विशेष रूप से उपकरण मौजूद हैं:

ऑटोसॉश ssh की एक प्रति शुरू करने और उसकी निगरानी करने के लिए एक कार्यक्रम है, इसे फिर से शुरू करना चाहिए क्योंकि इसे मरना चाहिए या ट्रैफ़िक को रोकना चाहिए। विचार rstunnel से है।

Mosh एक दूरस्थ टर्मिनल अनुप्रयोग है जो रोमिंग की अनुमति देता है, रुक-रुक कर कनेक्टिविटी का समर्थन करता है, और उपयोगकर्ता कीस्ट्रोक्स के बुद्धिमान स्थानीय गूंज और लाइन संपादन प्रदान करता है। Mosh SSH के लिए एक प्रतिस्थापन है। यह अधिक मजबूत और उत्तरदायी है, विशेष रूप से वाई-फाई, सेलुलर और लंबी दूरी की लिंक पर।


-1

यह tmuxशेल का उपयोग करके किया जा सकता है । यदि आपको किसी सत्र को फिर से शुरू करने का सबसे तेज़ तरीका काट दिया जाता है:

tmux a #0

यह कुछ भी नहीं जोड़ता है कि स्वीकृत उत्तर नहीं कहता है। यह भी मानता है कि उपयोगकर्ता के पास पहले से ही एक tmuxसत्र चल रहा है।
Kusalananda

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