init.d पाइथन में लिखी गई स्क्रिप्ट


10

स्टैकऑवरफ्लो पर एक सवाल आयाinit.d जो पायथन में स्क्रिप्ट लिखने के बारे में पूछ रहा था । एक टिप्पणी ने संकेत दिया कि इन लिपियों को शेल में प्रोग्राम किया जाना चाहिए, न कि पायथन में। init.dपायथन में स्क्रिप्ट लिख रहा है :

  1. खराब। खराब। खराब। ऐसा कभी न करें।
  2. अनुशंसित अभ्यास नहीं।
  3. ठीक है, कैवियट्स के साथ।
  4. विरासत की हठधर्मिता।
  5. पूरी तरह से ठीक है।

किसी भी दुःस्वप्न परिदृश्यों को जानना बहुत अच्छा होगा, या यदि यह नियम कुछ sysadmin के रक्त में लिखा गया है।

जवाबों:


9

मैं # 2 कहूंगा, लेकिन # 1 के बहुत करीब - "बुरा। बुरा। बुरा। बुरा कभी नहीं।" लिनक्स इनिट स्क्रिप्ट के लिए मानक, जैसे यह है, एलएसबी में है , और जबकि यह कभी बाहर नहीं आता है और कहता है कि "ये बोर्न शेल स्क्रिप्ट हैं", कई धारणाएं बनती हैं। एक, कि # के साथ शुरू होने वाली लाइनें टिप्पणी कर रहे हैं, ठीक बाहर काम करने के लिए होता है। अधिक समस्याग्रस्त आवश्यकता है कि init स्क्रिप्ट /lib/lsb/init-functions"वर्तमान परिवेश में शेल (विशेष निर्मित कमांड डॉट में देखें)" से कमांड निष्पादित करता है ।

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

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


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

अगर मुझे याद है, तो सभी डिस्ट्रॉक्ट एलएसबी का पालन नहीं करते हैं। डेबियन देखें।
मैसिमो

10

मुझे इसके साथ कोई समस्या नहीं दिखती है, यदि आप जानते हैं, तो निश्चित रूप से, कि पायथन दुभाषिया उपलब्ध होगा जब init.d स्क्रिप्ट को चलाया जा रहा है। यह, मेरे लिए, यह दर्शाता है कि आप बहु-उपयोगकर्ता (या "ग्राफिक कंसोल") रन-स्तर में अपेक्षाकृत देर से देख रहे हैं।

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

मुझे लगता है कि इसका मतलब है कि मैं कह रहा हूं "3. ठीक है, कैविटीज़ के साथ"।


4
+1। बिल्कुल वही जो मैं लिख रहा था। यहाँ केवल "समस्याएँ" यह सुनिश्चित करती हैं कि आप LSB के अनुरूप होंगे, (उदाहरण के लिए आवश्यक कार्य प्रदान करना) और यह सुनिश्चित करना कि आपके द्वारा आवश्यक अजगर दुभाषिया रनटाइम पर उपलब्ध है (और टूटा नहीं है)
सैम हैलिक

3
यदि उपयोगकर्ता ने एक अलग विभाजन पर usr / usr के लिए चुना है तो रनटाइम पर उपलब्ध जटिल हो सकता है। यह महत्वपूर्ण होगा कि आपकी स्क्रिप्ट के बाद / usr चलाई जाए क्योंकि अजगर आमतौर पर / usr में स्थापित होता है।
Zoredache

@Zoredache - अयूप। आमतौर पर, आप जानते हैं कि "हो गया है" जब आपको "मल्टी-यूज़र" आरसी अनुक्रम में देर हो रही है।
वेटिन

2

मैं "3. ठीक है, केवेट के साथ," लेकिन विभिन्न कारणों से सहमत हूं। सोलारिस पर मेरा अनुभव यह था कि उनके पास कुछ आंतरिक कार्यक्रमों के लिए पर्ल की ओएस कॉपी थी। खोल स्क्रिप्ट कुछ भी नहीं खोल से अधिक था पर्ल को किक करने के लिए। क्या स्टार्टअप स्क्रिप्ट को sh में लिखा जाना था? नहीं, लेकिन इसने प्रशासक के लिए रखरखाव में सुधार किया। और init स्क्रिप्ट ज्यादा कुछ नहीं जटिल की तरह सामान किया daemon --startया daemon --stop। यदि आपने ऐसा किया है, तो नियमित उपयोगकर्ता आपके टूल को अनप्रिविलेज मोड में शुरू कर सकते हैं, यदि यह आपके प्रोग्राम के संदर्भ में समझ में आता है। और उन्हें चालाकी करने के लिए सभी प्रकार की जटिल सेटिंग्स की आवश्यकता नहीं होगी।

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

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


1

मैं # 1-2 के बीच कहता हूं। एलएसबी आपको इस तरह से निर्देशित करता है .. और एक एसआईएस-एडमिन (गैर देव भूमिका) से नौकरी रिक् के डिक्टेट श / बैश ज्ञान, अजगर, पीएचपी या पर्ल के देव-स्तरीय (या यहां तक ​​कि प्रकाश की समझ) नहीं। यह LAMP स्टैक के लिए है, सिस्टम इनिट स्क्रिप्ट के लिए नहीं।

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