दूर से कई मशीनों को रिबूट करें


11

मुझे दूर से कई मशीनों को रिबूट करने की आवश्यकता है। आम तौर पर मैं सिर्फ जारी करता हूं

for host in <hostlist>;do ssh ${host} 'sudo shutdown -r now';done

लेकिन मैं उपयोगकर्ताओं को पुनरारंभ करने से पहले कुछ समय देना चाहता हूं। हालांकि वे ssh सत्र का उपयोग नहीं करेंगे भले ही मैं डिस्कनेक्ट कर दूं:

ssh -f 'sudo shutdown -r +5 &;disown'

मुझे एक त्रुटि संदेश मिला:

bash: -c: लाइन 0: अप्रत्याशित टोकन ;' bash: -c: line 0:सुडो शटडाउन -r +5 & के पास सिंटैक्स त्रुटि ;

कोई सुझाव?


1
मुझे यह जोड़ना चाहिए कि मैं शटडाउन कमांड को "और" के साथ पृष्ठभूमि में भेजने की कोशिश कर रहा हूं। यदि शेल कमांड विभाजक के रूप में "और" की व्याख्या कर रहा है, तो मैं इसे पृष्ठभूमि में भेजने के तरीके के रूप में स्टम्प्ड हूं ताकि "डिसऑन" कमांड काम करे।
होरेस

&चरित्र पृष्ठभूमि में बाएं हाथ की ओर आदेश भेज करता है। इस तरह से यह अलग है ;
कैस्पर

जवाबों:


31

जैसा कि त्रुटि संदेश द्वारा कहा गया है, आपके कमांड में एक सिंटैक्स त्रुटि है। यह थोड़ा आश्चर्यजनक तथ्य के कारण है जो &शेल कमांड का हिस्सा नहीं है, बल्कि कमांड (जैसे ;) के बीच एक विभाजक है। हालांकि दोनों कमांड सेपरेटर हैं, &इसके बाएं हाथ पर कमांड का अतिरिक्त प्रभाव है। यह निश्चित रूप से मुझे कभी-कभी भ्रमित भी करता है, और मैं अक्सर एक ही गलती करता हूं। एक बार जब आप इसे जान लेते हैं, तो इसे ठीक करना आसान होता है।

फिक्स लिखना नहीं है &;, बल्कि अपने इरादे के आधार पर दो विभाजकों में से एक लिखना है। (और ज्यादातर मामलों में जहां एक ने लिखा &;है इरादा केवल लिखना था &)।

यह काम करना चाहिए:

ssh server 'sudo shutdown -r +5 & disown'

7
आप मुझे कुछ सिखाने के लिए आज का पुरस्कार जीतते हैं, जिसे मैं 25 साल तक यूनिक्स पर कोसने के बाद नहीं जानता था। इसके अलावा +1!
MadHatter

क्या होगा अगर वह sudo shutdown -r +5 &पृष्ठभूमि पर चलने और फिर चलाने का इरादा रखता है disown? ऐसी स्थिति से कैसे निपटेंगे? मुझे उम्मीद है कि यह एक आदेश के लिए सही वाक्यविन्यास होगा, यहां तक ​​कि होने भी &;। यदि ;एक कमांड विभाजक है, तो आपके हाथों पर 2 कमांड हैं। सही?
इस्माइल मिगुएल

1
@IsmaelMiguel मुझे आपका सवाल नहीं आता। उपयोग &करने से बैकग्राउंड में पहला कमांड शुरू हो जाएगा और एक बार पहला कमांड शुरू हो जाने के बाद दूसरा कमांड अग्रभूमि में चलाया जाएगा।
कैस्पर

मेरा मतलब था कि sudo shutdown -r +5 &; disownएक बुरा वाक्यविन्यास की तरह नहीं लगता है। मेरा मतलब है, मेरा इरादा पहले भाग को पृष्ठभूमि में और फिर दूसरे भाग को चलाने का हो सकता है।
इस्माईल मिगुएल

@IsmaelMiguel कमांड पार्सर को खाली स्ट्रिंग पर विचार करने के लिए विस्तारित किया जा सकता है जो एक वैध कमांड है जो हमेशा सफल होता है। उस मामले में sudo shutdown -r +5 &; disownतीन वैध आदेशों से अलग माना जाएगा &और ;। हालांकि इसका मतलब यह होगा कि एक अतिरिक्त विभाजक का उपयोग न करने के लिए सावधान रहना होगा यदि पिछली कमांड की मौजूद स्थिति का उपयोग किया जाना है। इसका मतलब यह है कि किसी को भी उदाहरण के लिए टोकन पर ध्यान देना होगा &&और & &अलग से टोकन प्राप्त करना होगा।
कैस्पर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.