एसएसएच सत्र समाप्त होने के बाद प्रक्रियाओं को कैसे चालू रखें?

मान लीजिए कि मैं एसएसएच सत्र से प्रक्रियाओं का एक गुच्छा लॉन्च करता हूं । क्या रिमोट मशीन पर चलने वाली प्रक्रियाओं को रखते हुए एसएसएच सत्र को समाप्त करना संभव है?

आपको आधुनिक विकल्पों की तलाश करनी चाहिए जैसे tmux.

tmux से बेहतर है screen कई कारणों से, यहां कुछ उदाहरण दिए गए हैं:

  • विंडोज़ को सत्र के बीच ले जाया जा सकता है और कई सत्रों से भी जोड़ा जा सकता है
  • विंडोज को क्षैतिज और लंबवत रूप से पैन में विभाजित किया जा सकता है
  • यूटीएफ -8 और 256 रंग टर्मिनलों के लिए समर्थन
  • सत्र को सत्र में प्रवेश करने की आवश्यकता के बिना शेल से नियंत्रित किया जा सकता है

बुनियादी कार्यक्षमता

में बताई गई समान कार्यक्षमता प्राप्त करने के लिए उत्तर सिफारिश करना screen, आपको निम्नलिखित करना होगा:

  • ssh में दूरस्थ मशीन
  • प्रारंभ करें tmux टाइप करके tmux खोल में
  • उस प्रक्रिया को शुरू करें जिसे आप शुरू के अंदर चाहते हैं tmux सत्र
  • छोड़ें / अलग करें tmux टाइप करके सत्र Ctrl+b और फिर d

अब आप रिमोट मशीन से सुरक्षित रूप से लॉग ऑफ कर सकते हैं, आपकी प्रक्रिया अंदर चलती रहेगी tmux. जब आप फिर से वापस आते हैं और अपनी प्रक्रिया की स्थिति की जांच करना चाहते हैं जिसका आप उपयोग कर सकते हैं tmux attach अपने से जुड़ने के लिए tmux सत्र।

यदि आप कई सत्रों को साइड-बाय-साइड चलाना चाहते हैं, तो आपको प्रत्येक सत्र का उपयोग करके नाम देना चाहिए Ctrl+b और $. आप वर्तमान में चल रहे सत्रों की एक सूची प्राप्त कर सकते हैं tmux list-sessions, अब कमांड के साथ एक रनिंग सेशन से अटैच करें tmux attach-session -t <session-name>.

tmux एक सत्र में एकल विंडो को संभालने की तुलना में बहुत अधिक उन्नत चीजें कर सकते हैं । अधिक जानकारी के लिए एक नज़र है man tmux या के tmux GitHub पृष्ठ. विशेष रूप से, यहाँ एक एफएक्यू है के बीच मुख्य अंतर के बारे में screen और tmux.

विकल्प 1: nohup

सबसे अच्छा तरीका अक्सर सबसे सरल होता है ।

nohup long-running-command &

यह विशेष रूप से इसके लिए बनाया गया था, यह स्टडआउट को भी लॉग करता है nohup.log.

man nohup

विकल्प 2: bg + disown

ctrl+zbgdisown -h

यदि आप पहले से चल रहे कार्यों को पृष्ठभूमि और उद्धरण देना चाहते हैं, तो Ctrl+Z फिर भागो bg अपने सबसे हाल के निलंबित कार्य को पृष्ठभूमि में रखने के लिए, इसे चालू रखने की अनुमति देता है । disown लॉग आउट करने के बाद प्रक्रिया चालू रहेगी । द -h ध्वज को रोकता है hangup.


screen और दूसरों को यह कर सकते हैं, लेकिन है कि वे क्या कर रहे हैं के लिए नहीं है. मैं अनुशंसा करता हूं nohup कार्यों के लिए आप जानते हैं कि आप पीछे छोड़ने जा रहे हैं और bg उन कार्यों के लिए जिन्हें आप पहले से चला रहे हैं और फिर से शुरू नहीं करना चाहते हैं ।

ध्यान रखें, दोनों बैश विशिष्ट हैं । यदि आप बैश का उपयोग नहीं कर रहे हैं, तो कमांड अलग हो सकते हैं ।

आप इसका उपयोग करके ऐसा कर सकते हैं screen.

प्रकार man screen अधिक पढ़ें या इसे पढ़ें स्क्रीन मैन पेज.

सरल परिदृश्य:

  • ssh में अपने रिमोट बॉक्स. प्रकार screen फिर अपनी इच्छित प्रक्रिया शुरू करें ।

  • प्रेस Ctrl-A फिर Ctrl-D. यह आपके स्क्रीन सत्र को" अलग " करेगा लेकिन आपकी प्रक्रियाओं को चालू छोड़ देगा । अब आप रिमोट बॉक्स से लॉग आउट कर सकते हैं ।

  • यदि आप बाद में वापस आना चाहते हैं, तो फिर से लॉग ऑन करें और टाइप करें screen -r यह आपके स्क्रीन सत्र को" फिर से शुरू " करेगा, और आप अपनी प्रक्रिया का आउटपुट देख सकते हैं ।

स्क्रीन और नोहप बेहतर तरीका है, लेकिन अगर आपको स्क्रीन या नोहप के बिना पहले से चल रही प्रक्रिया को अलग करना है तो आप डिसाउन कमांड चला सकते हैं ।

disown [-ar] [-h] [jobspec… |pid… ]

विकल्पों के बिना, प्रत्येक को हटा दें jobspec सक्रिय नौकरियों की तालिका से । अगर द -h विकल्प दिया गया है, नौकरी को तालिका से हटाया नहीं गया है, लेकिन चिह्नित किया गया है ताकि शेल को एक आह प्राप्त होने पर नौकरी में नहीं भेजा जाए । अगर jobspec मौजूद नहीं है, और न ही -a न ही -r विकल्प की आपूर्ति की जाती है, वर्तमान नौकरी का उपयोग किया जाता है । अगर नहीं jobspec आपूर्ति की जाती है, -a विकल्प का अर्थ है सभी नौकरियों को हटाना या चिह्नित करना; -r एक के बिना विकल्प jobspec तर्क नौकरियों को चलाने के लिए संचालन को प्रतिबंधित करता है ।

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

मैं एक बड़े एमवी में फंस गया था इसलिए मैं प्रक्रिया, सेटअप स्क्रीन को रोकने और फिर इसे फिर से शुरू करने की स्थिति में नहीं था । मैं अनिवार्य रूप से निम्नलिखित चरणों को करके चलने वाली प्रक्रिया के साथ एसएसएच सत्र से बाहर निकलने में कामयाब रहा:

  1. स्थापित SSH कनेक्शन: ssh user@host
  2. प्रक्रिया शुरू करने के लिए वांछित कमांड चलाएं
  3. प्रेस Ctrl+Z प्रक्रिया को रोकने के लिए
  4. भागो bg रुकी हुई प्रक्रिया को पृष्ठभूमि में रखने और इसे फिर से शुरू करने के लिए ।
  5. भागो disown [pid] (प्रक्रिया आईडी वैकल्पिक है, अंतिम प्रक्रिया के लिए डिफ़ॉल्ट) प्रक्रिया को अस्वीकार करने के लिए । नौकरियों की सूची प्राप्त करने के लिए बस टाइप करें jobs पहले।
  6. चल कर एसएसएच सत्र से बाहर निकलें logout.

का उपयोग disown आदेश:

disown [-ar] [-h] [jobspec ... | pid ... ]              Without  options,  remove  each jobspec from the table of active              jobs.  If jobspec is not present, and neither the -a nor the  -r              option  is  supplied, the current job is used.  If the -h option              is given, each jobspec is not removed from  the  table,  but  is              marked  so  that  SIGHUP  is  not  sent  to the job if the shell              receives a SIGHUP.  If no jobspec is  supplied,  the  -a  option              means  to  remove or mark all jobs; the -r option without a job‐              spec argument restricts operation to running jobs.   The  return              value is 0 unless a jobspec does not specify a valid job.

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

Byobu

डेबियन-आधारित मशीन में ऐसा करके बायोबू को कंप्यूटर पर स्थापित किया जा सकता है:

sudo aptitude install byobu

यम का उपयोग करना, आप करते हैं

su -c 'yum install byobu'

अन्य वितरणों पर बायोबू स्थापित करना भी संभव है ।

का उपयोग कर byobu

आप बायोबू को चलाकर शुरू कर सकते हैं byobu एसएसएच का उपयोग करके कनेक्ट करने के बाद मेजबान मशीन पर । यह आपको एक खोल देगा जो इस तरह दिखता है:

image-byobu

आप उबंटू मशीन पर बायोबू टर्मिनल का भी उपयोग कर सकते हैं-एक्स विकल्प और आसानी से पूरी तरह से काम करने वाला बायोबू है ।

उपयोग:

शुरू byobu टाइप करके byobu.

आप वर्तमान सत्र के भीतर एक नई विंडो बनाने के लिए एफ 2 दबा सकते हैं, विभिन्न विंडो के बीच स्विच करने के लिए एफ 3-एफ 4 ।

बायोबू के बारे में सबसे अच्छी बात यह है कि आपको टर्मिनल छोड़ने के लिए टर्मिनल में चल रही प्रक्रियाओं को वास्तव में मारना नहीं है । आप बस स्क्रीन/टीएमयूएक्स (बायोबू का कंकाल) को पृष्ठभूमि में भेज सकते हैं और अगली बार आने पर फिर से शुरू कर सकते हैं:

  • बायोबू को छोड़ने के लिए और इसे चालू रखने के लिए (अलग) एफ 6 दबाएं ।

  • अगली बार जब तुम आओ, बस करो byobu और आप sholud वापस हो सकता है, जहां आप सही थे.

    byobu-detach-attach

आप विभिन्न बायोबू सत्र भी बना सकते हैं byobu -S session1 और इतने पर । और जब आप वापस आते हैं तो आप उनमें से किसी से भी जुड़ सकते हैं ।

आप बायोबू का उपयोग करके बहुत कुछ कर सकते हैं । यह प्रयोग करें!कुछ निश्चित गाइड हैं यहाँ, या यहाँ.

आप ऐसा नहीं कर सकते एक बार इस प्रक्रिया को शुरू कर दिया है, आप करने के लिए की जरूरत है चीजों को सेट अप करने से पहले आप चलाने के लिए एक लंबे समय से चल रहा है काम.

आप उपयोग कर सकते हैं nohup लेकिन आधुनिक ज्ञान से पता चलता है कि आप अपने लॉगिन के रूप में स्क्रीन या बायोबू का उपयोग करते हैं ताकि आप चीजों को अलग कर सकें और छोड़ सकें ।

स्क्रीन का यह फायदा है कि आप एक मशीन से अलग हो सकते हैं और दूसरे से फिर से जुड़ सकते हैं जो कि काम का है यदि आप लंबे समय तक चलने वाली प्रक्रियाओं की जांच करना चाहते हैं जो कार्य दिवस के अंत से परे चलती हैं ।

एक उचित शुरुआत हो रही है स्क्रीन के लिए गाइड यहाँ।

byobu मेनू आदि के साथ स्क्रीन के शीर्ष पर इंटरफ़ेस का उपयोग करना आसान है । यह नए उबंटू पर स्क्रीन का वर्तमान कार्यान्वयन भी है । एफ 2 एक नया टर्मिनल शुरू करने के लिए एफ 3/एफ 4 आगे और पीछे टॉगल करने के लिए और एफ 6 डिस्कनेक्ट करने के लिए । स्थायी रूप से टर्मिनलों को समाप्त करने के लिए बाहर निकलें टाइप करें ।

एक एकल शेल स्क्रिप्ट के लिए जो मेरे पास लंबे समय से चल रही है, मैं लॉगिन करूंगा, और 'एंड'का उपयोग करके पृष्ठभूमि में प्रक्रिया चलाऊंगा ।

उदाहरण:

/path/to/my/script &

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

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

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

सबसे पहले आपको टाइप करके प्रक्रिया को पृष्ठभूमि में भेजना होगा सीटीआरएल+जेड इसके बाद बीजी %1 (संख्या नौकरी संख्या पर निर्भर करती है, आमतौर पर यह 1 है, लेकिन आप कमांड का उपयोग करके सूची को आसानी से खींच सकते हैं नौकरियां)

अंत में कमांड को अस्वीकार करें (उसके बाद जॉबआईडी । .. बीजी कमांड के समान)

यह आपके शेल और पृष्ठभूमि में प्रक्रिया के बीच माता-पिता के बच्चे के रिश्ते को हटा देगा, जब आपका शेल समाप्त हो जाता है तो इसे मरने से रोक देगा ।

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

कैसे उपयोग करें :

  • कमांड का उपयोग करें screen पहली शुरुआत के लिए, परिचय संदेशों के माध्यम से स्क्रॉल करें, आपको एक टर्मिनल सौंपा जाना चाहिए ।
  • सी-ए सी-सी एक और टर्मिनल खोलता है
  • सी-ए सी-के एक टर्मिनल को मारता है
  • आप टर्मिनलों के माध्यम से साइकिल चलाने के लिए सी-ए सी-स्पेस और सी-ए सी-बैकस्पेस का उपयोग कर सकते हैं
  • यदि आप ज्यादातर केवल दो टर्मिनलों का उपयोग कर रहे हैं तो सी-ए सी-ए आसान है
  • सी-ए सी-डी वर्तमान स्क्रीन सत्र को अलग करता है और स्क्रीन से बाहर निकलता है । फिर आप उपयोग कर सकते हैं screen -r उस सत्र को फिर से शुरू करने के लिए । आपके पास एक साथ कई अलग स्क्रीन सत्र हो सकते हैं, इस स्थिति में आपको उपलब्ध सत्रों की एक सूची प्रदर्शित की जाएगी ।

कई अन्य विकल्प हैं, उदाहरण के लिए स्प्लिट स्क्रीन, और सभी शॉर्टकट भी पूरी तरह से अनुकूलन योग्य हैं ।

संबंधित: How can I run a command which will survive terminal close? - Unix & Linux Stack Exchange