शेल स्क्रिप्ट पर शेफ / कठपुतली का उपयोग क्यों करें?


81

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

मैं सहमत हूँ कि वे अधिक पठनीय हैं। लेकिन, क्या केवल पठनीय होने के अलावा शेल स्क्रिप्ट पर कोई अन्य लाभ हैं?

जवाबों:


56

एक डोमेन-विशिष्ट भाषा आपके द्वारा लिखे गए कोड की मात्रा में बड़ा अंतर करती है। उदाहरण के लिए, आप तर्क दे सकते हैं कि इसमें बहुत अंतर नहीं है:

chmod 640 /my/file

तथा

file { "/my/file":
    mode => 640,
}

लेकिन इनमें से बहुत अंतर है:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

तथा

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

क्या होता है अगर wget फेल हो जाता है? आपकी स्क्रिप्ट को कैसे संभालेंगे? और क्या होता है अगर आपकी स्क्रिप्ट में कुछ ऐसा है जिसके लिए सही सामग्री के साथ $ FILE की आवश्यकता होती है?

आप तर्क दे सकते हैं कि कोई भी echo "Hello world" > $FILEस्क्रिप्ट में डाल सकता है , सिवाय इसके कि पहले उदाहरण में स्क्रिप्ट क्लाइंट पर चलाई जानी चाहिए, जबकि कठपुतली सर्वर पर यह सब संकलित करती है। इसलिए यदि आप सामग्री बदलते हैं, तो आपको केवल सर्वर पर इसे बदलना होगा और इसे उतने सिस्टम के लिए बदलना होगा जितना आप इसे डालना चाहते हैं। और कठपुतली निर्भरता को संभालती है और स्वचालित रूप से आपके लिए समस्याएं स्थानांतरित करती है।

कोई तुलना नहीं है - उचित कॉन्फ़िगरेशन प्रबंधन उपकरण आपको समय और जटिलता से बचाते हैं। जितना अधिक आप करने की कोशिश करते हैं, उतनी ही शेल स्क्रिप्ट अपर्याप्त लगती हैं, और जितना अधिक प्रयास आप इसे कठपुतली के साथ करके बचाएंगे।


9
@ पाऊल गियर, यह कहना है कि कॉन्फ़िगरेशन प्रबंधन उपकरण लंबे समय तक चलने का तरीका है। उदाहरण के लिए, AWS का उपयोग करके एक शेल स्क्रिप्ट स्क्रैच से सर्वर का निर्माण कर सकता है, कुछ परीक्षण चला सकता है, और एक बार जब आप सुनिश्चित कर लें कि AWS इंस्टेंस ठीक है, तो एक छवि बनाएं। फिर आप इस छवि को आगे के परीक्षणों के लिए पूर्वावलोकन या मंचन के माहौल में तैनात कर सकते हैं, एक बार जब आप सत्यापित करते हैं कि छवि आपके उद्देश्यों के लिए अच्छी है, तो आप उत्पादन के लिए धक्का देते हैं। कॉन्फ़िगरेशन प्रबंधन उपकरण इस परिदृश्य में बिल्कुल मदद नहीं करते हैं।
डेरेक लिट्ज

अब यदि आप 100 समर्पित सर्वरों का प्रबंधन करना चाहते हैं, जिनका लोग दैनिक उपयोग कर रहे हैं (और आपके पास जो वे करते हैं, उस पर बहुत कम नियंत्रण है, गलती से या नहीं) तो कॉन्फ़िगरेशन प्रबंधन उपकरण का उपयोग किया जाना चाहिए।
डेरेक लिट्ज़

6
यह बहुत ठोस उदाहरण नहीं है। मैं शुरुआत के साथ शुरू कर सकता हूं और फिर मैं एक अजीब स्थिति में नहीं रहूंगा। क्या फ़ाइल एक लेन-देन की तरह है जो किसी भी चरण में सफल नहीं होने पर वापस लुढ़क जाएगी?
PSkocik

33

यह एक अलोकप्रिय राय होगी, लेकिन विन्यास प्रबंधन प्रणाली जरूरी बेहतर नहीं है। कभी-कभी सरल वास्तव में सबसे अच्छा होता है।

आपके द्वारा चुने गए कॉन्फ़िगरेशन सिस्टम के साथ एक निश्चित सीखने की अवस्था और प्रशासनिक ओवरहेड है। आप सब पर निर्भरता का परिचय देने के बाद हैं। किसी भी स्वचालन के साथ आपको यह भी ध्यान रखना चाहिए कि तैनात विन्यास में सुरक्षा बनी रहती है।

मेरे पास केवल कुछ उदाहरण हैं जहां हमने कॉन्फ़िगरेशन प्रबंधन को तैनात किया है और यह अटक गया है। यह हमेशा होता था जब पुनरावृत्ति विन्यास के साथ बड़ी संख्या में सिस्टम थे और विन्यास योग्य कुकी-कटर की तैनाती की आवश्यकता थी।


10
जब पर्यावरण के प्रबंधन की लागत इतनी बड़ी है कि स्वचालन का प्रबंधन करना वास्तव में सस्ता है। अगर यह Git में प्रबंधित स्क्रिप्ट परिवर्तनों के लिए सरल है या एक ssh मल्टीप्लेक्सर में चीजें सेट करता है जो हम करते हैं। मेरे लिए सबसे महत्वपूर्ण यह है कि मैं सिस्टम की निगरानी करता हूं और सत्यापित करता हूं कि सब कुछ अपेक्षित रूप से कार्य कर रहा है। जब तक मुझे सूचित किया जाता है जब कुछ गलत है, यह इतना महत्वपूर्ण नहीं है कि यह कैसे कॉन्फ़िगर किया जाता है।
केेंचिलाड़ा

10
@ewwhite "जब आप बनाम" xkcd.com/1205
मिकी

3
अधिक आधुनिक उपकरण जैसे कि एन्सिबल में शेफ या कठपुतली की तुलना में काफी कम तैनाती / प्रबंधन ओवरहेड होता है, जिसके लिए बहुत कम निर्भरता की आवश्यकता होती है (विशेष रूप से विश्वसनीय एजेंट रहित है)। यह वास्तव में अपनाने के लिए बार को कम करता है।
गोमोक्स

2
@ जब आप व्यक्तिगत उत्पादकता के लिए चाहते हैं तो आप स्वचालित। आप स्वचालित करके सीखते हैं, आप सांसारिक कार्य करके नहीं सीखते हैं। सीखना = उत्पादकता में वृद्धि और पुनरावृत्ति सुधार। स्वचालन अधिक सकारात्मक बनाने के लिए इस के साथ जोड़ती है। यह एक नकारात्मक के बजाय एक सकारात्मक स्नोबॉल है। तकनीकी प्रगति बनाम तकनीकी ऋण।
डेरेक लिट्ज़

2
@ABB नहीं, यह निहित नहीं है। मैं शेल स्क्रिप्ट का भी उल्लेख नहीं करता, मैं एक सामान्य अभ्यास के रूप में स्वचालन का उल्लेख करता हूं। आप शेल स्क्रिप्ट के साथ चीजों को स्वचालित कर सकते हैं और स्क्रिप्टिंग एब्सट्रेक्शन को मैन्युअल रूप से करने के बजाय सीख सकते हैं जो न केवल आपको उस कार्य को फिर से करने का समय बचाएगा, यह गलतियों को रोक देगा। इसके अलावा, आपको अपनी अगली स्क्रिप्ट को थोड़ा बेहतर लिखने में सक्षम होना चाहिए, फिर आखिरी। एक पॉजिटिव स्नो बॉल ... हालाँकि, अगर आप स्क्रिप्ट लिखने में एक्सपर्ट हैं और आप ऐसी स्क्रिप्टिंग नहीं कर रहे हैं, जो आप कभी भी दोबारा चलाएंगे, तो यह आपको किसी भी तरह से सीखने या बचाने में मदद नहीं करता है।
डेरेक लिट्ज

23

आपने अपने प्रश्न का उत्तर दिया है ...

स्वचालन अधिक स्केलेबल और औपचारिक होता जा रहा है । कठपुतली और बावर्ची इन दिनों मानक माने जाते हैं ( नौकरी विज्ञापनों की जाँच करें )।

कोब्लेड-एक साथ शेल स्क्रिप्ट का स्थान है, लेकिन वे DevOps आंदोलन के संदर्भ में मापनीय नहीं हैं । पठनीयता उसी का हिस्सा है।


7
क्या शेल स्क्रिप्ट किसी तरह कम औपचारिक हैं? क्या नौकरी विज्ञापनों को उद्धृत करना एक तर्क को ठोस बनाता है? और एक देवता काफी शर्म की बात है, s / के लिए वह एक डेवलपर के रूप में बिना सोचे समझे है। लिंक वास्तव में मापनीयता के बारे में कुछ नहीं कहता है। क्या यह दावा है कि शेल स्क्रिप्ट स्केलेबल नहीं हैं? मुझे लगता है कि कठपुतली दिलचस्प है, लेकिन जवाब में कारणों के लिए जरूरी नहीं है।
एक्यूमेनस

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

1
"और एक देवता काफी शर्म की बात है, एस के लिए / वह एक डेवलपर के रूप में अनपेक्षित है।" यह बस सच नहीं है। DevOps वेब डेवलपमेंट की तरह ही एक डेवलपमेंट स्पेशलाइजेशन है। सॉफ्टवेयर विकास के पैटर्न और व्यवहार अभी भी लागू होते हैं। आपको DevOps के बारे में पढ़ना चाहिए।
चैम एलियाह

13

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

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

एक उचित सीएम समाधान क्रॉस-प्लेटफॉर्म स्वचालन और टीम सहयोग को सरल बनाकर पैमाने पर सफलता सुनिश्चित करने में मदद करता है। हालांकि, यह सब एक अच्छी तरह से व्यवस्थित, ठीक से बनाए रखा, शेल स्क्रिप्ट के संस्करण के साथ पूरा करना संभव है; आपको अपने आप से "क्यों" पूछना है। शेफ / कठपुतली और इसी तरह की तकनीकों के बारे में आया क्योंकि प्रतिभाशाली SysOps का एक समूह बार-बार इन समान समस्याओं को हल करने के लिए थक गया था और हमें बेहतर विकल्प देने के लिए तैयार हो गया था।

मुख्य टुकड़े:

  • Idempotence
  • डिपेंडेंसी मैनेजमेंट में आसानी (संस्करणकरण)
  • मानकीकृत संगठन (उद्योग स्तर पर स्वीकृत)
  • सिस्टम स्तर के विवरण से सर्वर कॉन्फ़िगरेशन कार्यों को अलग करने के लिए अमूर्तता
  • सामुदायिक ज्ञान का लाभ उठाने की क्षमता (जो उपरोक्त सभी सिद्धांतों को अपनाने की गारंटी है)

3
एसएस के साथ इम्पोटोटेंस शायद ही असंभव है। निर्भरताएं यम / एप्ट आदि द्वारा अच्छी तरह से प्रबंधित की जाती हैं। स्वीकृति अप्रासंगिक है। Ss के लिए सामुदायिक ज्ञान मौजूद है। हालांकि, मैं स्वीकार करता हूं कि लिपियों के एक समूह पर कॉपी नहीं करना है, और सिस्टम को केंद्रीय रूप से कॉन्फ़िगर करना भी दोनों उपयोगी हैं। मैंने सुना है कठपुतली एक ग्राहक पक्ष एजेंट की आवश्यकता है।
एक्यूमेनस

10

कठपुतली और बावर्ची जैसे आधुनिक कॉन्फ़िगरेशन प्रबंधन उपकरण आपको कॉन्फ़िगर सर्वर को प्राप्त करने के लिए आवश्यक गतिविधियों के बारे में चिंता करने के बजाय एक सिस्टम की स्थिति को परिभाषित करने की अनुमति देते हैं ।

उदाहरण के लिए, आपका chmod कमांड मानता है कि फ़ाइल मौजूद है, फ़ाइल का मालिक उपयोगकर्ता मौजूद है, निर्देशिकाओं को बनाया गया है, और इसी तरह। इसलिए आपकी स्क्रिप्ट को इन सभी आवश्यक शर्तों पर विचार करना चाहिए।

राज्य-आधारित कॉन्फ़िगरेशन प्रबंधन उपकरण सरल हैं: आप केवल इस बात का ध्यान रखते हैं कि फ़ाइल की सही अनुमति हो। कैसे हासिल किया जाता है कि उपकरण की समस्या है।


1
वास्तव में मेरा chmodअनुमान नहीं है कि फ़ाइल मौजूद है क्योंकि स्क्रिप्ट द्वारा फ़ाइल का निर्माण या परीक्षण किया गया था।
एक्यूमेनस

9

यदि सर्वर आपके लिए डिस्पोजेबल हैं, या आपके पास एक समय में एक जोड़े से अधिक खड़े होने का कारण है, तो एक पूर्ण विकसित सीएम सिस्टम शेल स्क्रिप्ट की एक श्रृंखला की तुलना में आपकी आवश्यकताओं को पूरा करेगा।

यदि आपकी निर्माण की जरूरतें मामूली हैं, (या कारीगर के लिए हाथ से तैयार किए गए ऑर्गेनिक फ्री-रेंज फेयर-ट्रेड सर्वर) पसंद करते हैं, तो आप इसे सरल रखें।

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

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

एक अन्य लाभ समुदाय है: बहुत सारे लोग हैं (जिनमें से कई आपके मुकाबले अधिक स्मार्ट और / या अधिक अनुभवी होंगे)। व्यक्तिगत रूप से मुझे यह पसंद है जब किसी और ने मेरे लिए अपना काम किया है, तो अक्सर मेरे मुकाबले अधिक बड़े पैमाने पर।


1

मैंने एक शेल स्क्रिप्ट-आधारित सर्वर ऑटोमेशन फ्रेमवर्क बनाया: https://github.com/myplaceonline/posixcube

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

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