Init.d से upstart तक, क्या कोई पुल है?


11

मुझे /etc/init.d में उपयोग के लिए एक पूरी तरह से अच्छी स्क्रिप्ट मिली है। वास्तव में, मेरे पास बहुत सारे हैं, सभी को तनुकी जावा सेवा आवरण के साथ बनाया गया है।

यह मुझे प्रतीत होगा कि इस तरह के शेल स्क्रिप्ट को अपस्टार्ट स्क्रिप्ट के रूप में लपेटने के लिए एक सरल टेम्पलेट हो सकता है, लेकिन थोड़ा सा googling एक खुलासा नहीं कर रहा है।

क्या मैं कुछ भूल रहा हूँ?

जवाबों:


9

मुझे इसके लिए कोई खाका देखकर याद नहीं है। यह थोड़ा विडंबनापूर्ण है, हालाँकि, तकनीकी रूप से, इसका उत्थान जो कि पहले से ही आपकी init.d स्क्रिप्ट को शुरू कर रहा है, पिछड़ी अनुकूलता जॉब आरसी और आरसीएस के लिए धन्यवाद।

जो कुछ भी आपके पास एक अपस्टार्ट नौकरी के रूप में है, मैं उसे फिर से लिखने पर विचार करूंगा, हालांकि, मुझे पता है कि कुछ लिपियों को परिवर्तित करना मुश्किल है, इसलिए यहां मैंने अपनी कुछ लिपियों पर थोड़ी देर के लिए क्या किया:

description "xyz"
author "xyz"
start on runlevel 5
stop on runlevel [!5]

pre-start script
    # do my work here to start the service
end script

post-stop script
    # do work here to stop the service
end script

अब सेवा की प्रकृति के आधार पर, चाहे वह खुद बनी रहे या कांटे, आपको नौकरी की फाइल में जोड़ना expect forkया taskकरना पड़ सकता है ।

बस सोचा को पूरा करने के लिए, आमतौर पर, यह सब वैसे भी एक पूर्ण upstart नौकरी फ़ाइल के लिए है। सभी प्री-स्टार्ट का काम किया जाता है, सभी का सफाई किया जाता है, केवल एक ही चीज शेष है वह सेवा है जो आमतौर पर अपने साथ जोड़ा जाता है:

exec service_cmd

अपस्टार्ट में, दस्तावेज़ कहता है कि रन स्तर 3,4, और 5 अप्रयुक्त हैं। तो, आपको बस रन स्तर 2 का उपयोग करना चाहिए
djangofan

थोड़ी देर हो गई है, लेकिन मुझे पूरा यकीन है कि 5 सिस्टम जीयूआई के साथ शुरू हुआ है, कम से कम इसका उपयोग किया जाता है।
जोसेफ रोजर्स

6

इसलिए अपस्टार्ट नौकरियों का एक बिंदु लिखना आसान है।

Init.d स्क्रिप्ट में बहुत सी शेल स्क्रिप्ट मैजिक है जो बार-बार मिलती है। केस स्टेटमेंट, पिडफाइल ट्रैकिंग, lsb कमेंट लाइन्स। यह बहुत स्पष्ट नहीं है कि बिना पढ़े एक GOOD init.d स्क्रिप्ट कैसे लिखें।

यदि आप पहले से ही उस सब को लिखने की परेशानी से गुजर चुके हैं, तो आपको तब तक अपस्टार्ट जॉब की आवश्यकता नहीं है, जब तक कि मैंने किसी अन्य टिप्पणी में उल्लेख नहीं किया है, आप एक और अपस्टार्ट जॉब / ईवेंट पर निर्भर हैं।

लेकिन वास्तव में, upstart चीजों को वास्तव में सरल बनाता है। जब तक आपको tmpdirs, ulimits, या runtime आर्ग्युमेंट्स जैसी चीजें सेट करने की आवश्यकता नहीं होती, आपको एक प्री-स्टार्ट की आवश्यकता नहीं होती। आपको तब तक पोस्ट-स्टॉप की आवश्यकता नहीं होनी चाहिए जब तक कि आप यह सुनिश्चित नहीं करना चाहते कि आप किसी सेवा के बाद ठीक से काम करना चाहते हैं (सेवा वास्तव में सामान्य निकास पर खुद के बाद सफाई होनी चाहिए)।

अक्सर एक विशाल init.d स्क्रिप्ट कई विकल्पों के साथ 10 - 15 लाइन अपस्टार्ट नौकरी के लिए उबालती है। सबसे जटिल init.d स्क्रिप्ट में उनके अधिकांश तर्क पूर्व-प्रारंभ में डंप हो सकते हैं। कुंजी यह है कि इस प्रक्रिया के लिए पर्यावरण को स्थापित करने के लिए कोड का सिर्फ एक छोटा सा टुकड़ा है, और प्रारंभ / रोक / प्रतिक्रिया / आदि को संभालने पर तर्क नहीं है।

सबसे कठिन हिस्सा, और वह जो लोगों को सबसे अधिक बार गलत लगता है, वह यह जानता है कि नौकरी कब शुरू / बंद करनी है। start on runlevel [2345]तर्कसंगत लगता है, लेकिन इस तथ्य को अनदेखा करता है कि नेटवर्क उस बिंदु पर समानांतर में आ रहा है, जैसा कि स्थानीय फाइल सिस्टम माउंट हैं। दौड़ने के लिए कुंजी की जरूरत होती है और दौड़ने के लिए आवश्यक न्यूनतम चीजें (अन्य सेवाओं, फाइल सिस्टम, नेटवर्क, आदि) की खोज करें और जब ऐसा किया जाता है तो शुरू करें। अधिकांश पारंपरिक नेटवर्क सेवाओं को करना चाहिए start on (local-filesystems and net-device-up IFACE!=lo)


3

मैंने सोचा था कि अपस्टार्ट SysV- स्टाइल इनिट स्क्रिप्ट के साथ बैकवर्ड-कम्पेटिबिलिटी बनाए रखता है /etc/init.d। आपको बस अपनी इनइट स्क्रिप्ट का उपयोग करने में सक्षम होना चाहिए।


यह करता है, लेकिन आदेश अब भविष्यवाणी करना इतना आसान नहीं है। अपस्टार्ट जॉब्स आपकी rc2.d / S99mything स्क्रिप्ट के पहले / बाद में शुरू हो सकती हैं। इसलिए जैसे ही आप एक upstart प्रबंधित सेवा पर निर्भर होते हैं, आपको एक upstart नौकरी की आवश्यकता होती है।
SpamapS

2
एक हैक के रूप में, आप विशिष्ट रनलेवलों से अपने init स्क्रिप्ट को निकालने, और बदले की तरह लाइनों की एक गुच्छा जोड़ सकते हैं /etc/init.d/myservice startकरने के लिए /etc/rc.local, सही क्रम में। यह सुनिश्चित करेगा कि आपकी सेवाएं अंतिम रूप से शुरू हों, अन्य सभी सेवाओं के बाद, जिनमें अपस्टार्ट इनिट स्क्रिप्ट द्वारा शुरू किया गया था।
रयान सी। थॉम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.