लंबे समय से चल रही एसएसएच कमांड हैंगिंग - बेहतर रणनीति?


2

मेरे पास एसएसएच पर लंबे समय तक चलने वाली कमान है। हर बार, कमांड को हैंग होने लगता है और कोई आउटपुट मिलना बंद हो जाता है। कमांड अभी भी दूसरी मशीन पर चल रही है (वास्तव में, अगर मैं SSH कमांड से Ctrl + C बाहर करता हूं, तो यह अभी भी चलता है, जो ठीक है), मेरा क्लाइंट बस लटका हुआ है।

मेरा आदेश antइस तरह एक लक्ष्य चल रहा है :

ssh -tt user@machine 'cd /thedir; export DISPLAY=:80; ant clean test'

antआदेश में एक घंटे तक का समय लग सकता है।

मुझे लगता है कि यह एक खराब रणनीति है, क्योंकि कोई भी नेटवर्क ब्लिप्स हो सकता है और मेरे कनेक्शन को गड़बड़ कर सकता है। क्या कोई वैकल्पिक दृष्टिकोण सुझा सकता है? मेरा लक्ष्य होगा:

  1. मेरा क्लाइंट कमांड खत्म होने का इंतजार करता है
  2. मैं अभी भी कमांड से आउटपुट प्राप्त करता हूं
  3. यदि नेटवर्क ब्लिप्स होता है, तो मैं अभी भी जांच कर सकता हूं और टिप्पणी समाप्त होने तक प्रतीक्षा कर सकता हूं

किसी भी मदद या सुझाव बहुत सराहना की है।

संपादित करें: मैं एक फुल बैश स्क्रिप्ट चला रहा हूं ... मुझे वन-लाइनर या ऐसा कुछ भी करने की आवश्यकता नहीं है।


1
यह 'स्क्रीन' का उपयोग करने में सहायक हो सकता है, ताकि जब आप डिस्कनेक्ट करें, तो आप अपने आउटपुट को फिर से शुरू करते हुए, सत्र को फिर से कनेक्ट कर सकें। gnu.org/software/screen
फ्रैंक थॉमस

1
@FrankThomas - हाँ - इसे उत्तर के रूप में जोड़ें। कुछ वोट प्राप्त करें
डग हैरिस

दिलचस्प है, मैं परिचित नहीं हूं screen, और यह वही हो सकता है जो मैं देख रहा हूं। मैं कुछ खुदाई करूँगा।
शॉन एडकिंसन

जवाबों:


2

आप बैकग्राउंड में कमांड चलाने की कोशिश कर सकते हैं (अपने उपयोगकर्ता सत्र से अलग) और ईमेल के माध्यम से खुद को परिणाम भेज सकते हैं। Kinda की तरह:

ssh -tt user@machine 'cd /thedir; nohup ant clean test 2>&1 | mail -s "The cleanup was completed." your-email@exmaple.com'

हालांकि मैंने इसका परीक्षण नहीं किया है।


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

@BigSean: ठीक है, मुद्दा यह है कि आपको "नेटवर्क ब्लिप्स" के कारण डिस्कनेक्ट किया जा सकता है। इसलिए, यदि आप कनेक्ट नहीं हैं, तो आपके ग्राहक को किसी भी चीज़ का इंतजार कैसे करना चाहिए? मैं केवल और अधिक जटिल होने की कल्पना कर सकता था, जैसे किसी फ़ाइल में लॉग इन करना और कमांड से बाहर निकलने तक उस लॉग को देखना और यदि आप डिस्कनेक्ट हो जाते हैं, तो आपके पास अभी भी लॉग है। या मैं लक्ष्य को गलत समझ रहा हूं?
डेर होकस्टाप्लर

मुझे स्क्रिप्ट पूरी होने तक फिर से संलग्न करने या जांचने की कोशिश करने के लिए स्क्रिप्ट की आवश्यकता होगी। प्रत्येक कोड चेकइन के लिए मेरे CI वातावरण में स्क्रिप्ट चल रही है, इसलिए मुझे स्क्रिप्ट के पूरा होने की प्रतीक्षा करने की आवश्यकता है ताकि अगला निर्माण चरण चल सके। यदि स्क्रिप्ट विफल हो जाती है, तो मुझे विफल होने के लिए बिल्ड की आवश्यकता है। मैं इनमें से अधिक विवरणों के साथ प्रश्न को अपडेट करूंगा। धन्यवाद
शॉन Adkinson

@BigSean: उस मामले में मैं कुछ और अधिक जटिल लिखना होगा। लेकिन आखिरकार, मैं एक समाधान प्राप्त करना चाहूंगा जो इस SSH कनेक्शन पर बिल्कुल भी भरोसा नहीं करता है।
डेर होकस्टापलर

2

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

इस तरह, जब आपका नेटवर्क hiccupps, autossh फिर से कनेक्ट होगा, और स्क्रीन आपके स्क्रिप्ट शेल को रीटच करेगा।

localhost>$ autossh -t remotehost 'screen -Rd'
remotehost>$ scriptname

इस तरह, जब ssh की मृत्यु हो जाती है, तो ऑटोशॉट पुन: कनेक्ट हो जाएगा और स्क्रीन सत्र को स्वचालित रूप से रीटैट करेगा।

http://noone.org/blog/English/Computer/Shell/Perfect%20Team:%20autossh%20and%20GNU%20Screen.html

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