SSH पर एक nohup कमांड चलाएँ, फिर डिस्कनेक्ट करें


46

मैं एक स्क्रिप्ट निष्पादित करना चाहता हूं, start.shएक दूरस्थ सर्वर पर जो इसे चलाता है:

nohup node server.js &

इस प्रकार, मैं SSH को इस तरह कहता हूं:

ssh myserver <<EOF
./start.sh &
EOF

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

मैं दूरस्थ मशीन में एसएसएच कैसे कर सकता हूं, nohupपृष्ठभूमि में एक कमांड लॉन्च करें , फिर डिस्कनेक्ट करें? मुझे लगता है कि मैं SSH प्रक्रिया को पृष्ठभूमि में रख सकता था, लेकिन यह सही नहीं लगता।

जवाबों:


40

आपको पहले से ही सही तरीका मिल गया है, यहाँ दस्तावेज़।

नोट : आप ssh (क्लाइंट) को एंड में और अंत में बैकग्राउंड में रख सकते हैं, लेकिन आप आउटपुट नहीं देखेंगे। यदि आप वास्तव में ऐसा करना चाहते हैं, तो दूरस्थ होस्ट से प्रतिक्रिया की जांच करने के लिए आपको stdout / stderr को एक फ़ाइल पर पुनर्निर्देशित करना होगा।

मूल रूप से आप इसे किसी भी तरह से कर सकते हैं:

सीधे {, s} कमांड चलाएँ

ssh user@host "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"

या

ssh user@host "$(nohup command1 > /dev/null 2>&1 &) && nohup command2 >> /path/to/log 2>&1 &"

नोट : &&दूसरे को निष्पादित करने से पहले 0 वापस करने के लिए पहले कमांड की आवश्यकता होती है

यहाँ दस्तावेज़ का उपयोग करें

ssh user@host << EOF
nohup command1 > /dev/null 2>&1 &
nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF

उपरोक्त 3 विकल्प आपके लिए काम करने चाहिए।

इसके अलावा, यहां दिए गए उत्तर पर एक नज़र डालें: https://askubuntu.com/a/348921/70270


धन्यवाद - तो मुझे याद आ रही बिट वास्तव में थी > /dev/null
स्टीव बेनेट

वास्तव में नहीं है, > /dev/null 2>&1ब्लैक होल के लिए पुनर्निर्देशन द्वारा किसी भी stdout / stderr उत्पादन को त्यागने के लिए है
टेरी वैंग

5
ध्यान दें कि मैं लॉग फ़ाइलों को लिखने के लिए सिर्फ> के बजाय> का उपयोग करने का सुझाव दूंगा। अन्यथा, आप केवल बहुत अंतिम रन से त्रुटियों को प्राप्त करेंगे।
एलेक्सिस विलके

क्या यह सही है कि अगर मैं बस nohup command2 >> /path/to/command2.log 2>&1 &एक टर्मिनल के रूप में एक कमांड शुरू करता हूं और फिर उस टर्मिनल को बंद कर देता हूं जो प्रक्रिया खो गई है?
ल्यूक

1
@TerryWang दूसरा उदाहरण एम्परसैंड के साथ काम नहीं करेगा, जिसके बाद डबल एम्परसेंड होगा, देखें unix.stackexchange.com/q/67006/86716
tsionyx

7

क्यों नहीं बस tmux या स्क्रीन और इसके साथ किया जा सकता है? उदाहरण के लिए:

$ tmux new -s SessionNameHere
$ nohup /path/to/your/script.sh

यह व्यावहारिक है अगर यह कुछ ऐसा है जो लगातार लूप करेगा या समाप्त होने में थोड़ी देर लेगा। आप सत्र से डिस्कनेक्ट कर सकते हैं और यह सक्रिय रहेगा।


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

3
ssh node "nohup sleep 10 &"

डेमॉन मोड में नहीं चल रहा है, अपने ssh सत्र को जुड़ा हुआ है। Ssh सत्र 10 सेकंड में वापस आ जाएगा, आपके द्वारा nohup का उपयोग करने के बावजूद।

कारण यह है कि दूरस्थ स्टडआउट और स्टेडर अभी भी आपके सत्र से जुड़ा हुआ है। यह ssh सत्र को जीवित रखता है, nohup मदद नहीं करता है।

इस:

ssh node "nohup sleep 10 1>/dev/null 2>/dev/null &"

तुरंत लौटता है। यह nohup के साथ दूरस्थ प्रक्रिया शुरू करता है और तुरंत ssh सत्र से बाहर निकलता है।


यह ठीक हमारी समस्या थी। हमारे पास केवल 1> file.log था। एक मशीन पर ssh अटक गया था। 'नोड' मशीन पर प्रक्रिया चल रही थी। जब हमने समापन से ठीक पहले एक 2> & 1 जोड़ा, और ssh को डिस्कनेक्ट कर दिया।
ली मीडोर

2

छोटा रूप:

ssh host "(command 1; command 2; ...) &>/dev/null &"

ऐसा प्रतीत होता है, कि बैश खुद ही टर्मिनल से कोचिंग करते हैं, इसलिए नोह की जरूरत नहीं है। मैं Ubuntu 14.04 x86_64 चलाता हूं, 4.3.11 को हरा देता हूं।


1
यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका स्पष्टीकरण देने के लिए, उनकी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपने स्वयं के पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे । - समीक्षा से
डेविड फ़ॉस्टर

यह काम नहीं लगता है। nohup; बस लापता तर्कों के बारे में एक शिकायत है।
स्टीव बेनेट

@DavidFoerster, कोई आइडिया क्यों नहीं, अगर command 1; command 2; ...स्क्रिप्ट ओपी का प्रतिनिधित्व करना चाहता है। OP इस उत्तर के विशेष मामले का भी उपयोग कर सकते हैं:ssh myserver ./start.sh &>/dev/null &
Alek_A
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.