सीधे स्क्रिप्ट को कॉल करने के बजाय पर्यवेक्षक में `bash -c` का उपयोग क्यों करें?


11

मैं supervisordअपने सर्वर में सेवाओं को नियंत्रित करने के लिए उपयोग करना शुरू कर रहा हूं । मैं लिनक्स का समर्थक उपयोगकर्ता नहीं हूं, लेकिन इसके साथ काफी अच्छी तरह से मिल सकता हूं और इसे चला सकता हूं।

जिज्ञासा से बाहर, मैंने देखा है कि पर्यवेक्षक में अधिकांश आदेशों को कहा जाता है:

[program:install]
command=bash -c "/src/etc/install.sh"

मैंने बैश के आदमी को पढ़ा है, और पता है कि -cस्ट्रिंग के बाद पारित चर डालने के लिए उपयोग किया जाना चाहिए।

तो bash -cस्क्रिप्ट को सीधे कॉल करने के बजाय पर्यवेक्षक (या किसी अन्य स्थान) में उपयोग करने का क्या मतलब है (उदाहरण के लिए नीचे), यह देखते हुए कि कोई चर जहां पारित / उपयोग नहीं किया गया?

[program:install]
command=/src/etc/install.sh

धन्यवाद!

जवाबों:


11

शैल पथ विस्तार (के रूप में ऐसी सुविधाओं *, ?), आदेश सूची ( ;, &&, ||), पुनर्निर्देशन ( <, >, |,) supervisord द्वारा कार्यान्वित नहीं कर रहे हैं कि एक ही तर्क तार की एक सरणी में आदेश बांट देता है।

bash -cबस नौसिखिए उपयोगकर्ता के लिए जो आदेश में इस तरह की सुविधाओं का उपयोग करने के लिए परीक्षा हो सकती है के लिए एक मदद हो सकती है। उदाहरण के लिए यह आश्चर्य से बचा जाता है

command=echo foo > /tmp/bar

आउटपुट foo > /tmp/barके बजाय लिखने के fooलिए /tmp/bar

-cचर के साथ बहुत कम है। बैश के लिए किसी भी अतिरिक्त तर्क केवल स्क्रिप्ट तर्क के रूप में उपलब्ध होगा $0, $1, आदेश में आदि, लेकिन यह सुविधा शायद ही कभी किसी भी उपयोग किया है। उदाहरण के लिए bash -c 'echo $0 $0' fooआउटपुट foo foo


1
धन्यवाद, यह एक बहुत ही व्यावहारिक जवाब था, और वह शायद मुझे बहुत समय बचाएगा। मैं, नौसिखिए उपयोगकर्ता के रूप में, यह गलती करूँगा (और bash -cसमाधान के रूप में कभी नहीं सोचूंगा!)।
डैनियल कोस्टा

6

यह प्रलेखन में समझाया गया है :

पर्यवेक्षक द्वारा किसी भी शेल को निष्पादित नहीं किया जाता है जब यह एक उपप्रकार चलाता है, इसलिए पर्यावरण चर जैसे USER, PATH, HOME, SHELL, LOGNAME, इत्यादि को उनके चूक या अन्यथा पुन: असाइन किए गए से नहीं बदला जाता है। यह नोट करना विशेष रूप से महत्वपूर्ण है जब आप कॉन्फ़िगरेशन में उपयोगकर्ता = श्लोक के साथ रूट के रूप में किसी सुपरवाइजर से प्रोग्राम चला रहे हों।

इस समस्या bash -cको हल करने के लिए उपयोग किया जा सकता है।


2
मार्क, आपके उत्तर के लिए धन्यवाद, लेकिन मुझे लगता है कि अन्य एक अधिक प्रशंसनीय परिदृश्य था (जबकि तुम्हारा मेरे लिए गलत नहीं है, मुझे अभी भी एक सही उत्तर चुनने की आवश्यकता है ..)। इसके अलावा, मैं भी कम अंक के साथ नए उपयोगकर्ता की मदद कर रहा हूँ।
डैनियल कोस्टा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.