Init.d द्वारा शुरू की गई जीवित प्रक्रिया को बनाए रखने के लिए मानक या सर्वोत्तम तरीका


14

मैं एक init.dशेल स्क्रिप्ट द्वारा शुरू किए गए डेमॉन को जीवित रखने के लिए एक मानक तरीके या सर्वोत्तम अभ्यास की तलाश कर रहा हूं ।

या इससे भी बेहतर, क्या इसे सीधे से जीवित रखने का कोई तरीका है /etc/init.d?

विशेष रूप से, मेरे पास एक डेमॉन है जिसे dtnd कहा जाता है और अनंत लूप जो अप्रत्याशित समाप्त प्रक्रिया की तलाश करता है, यदि कोई हो, तो डेमन उन्हें फिर से जगाते हैं। इसके अलावा, मैं स्टार्ट-स्टॉप-डेमॉन टूल का उपयोग करता हूं ताकि किसी दिए गए सिस्टम उपयोगकर्ता से चला जा सके।

मैं इस dtnd डेमॉन को स्टार्टअप से चलाना चाहता हूं। इस व्यवहार को प्राप्त करने के लिए मैंने प्रारंभ, स्टॉप और स्टेटस कमांड का उपयोग करके dtnd फ़ाइल को "लपेटता" एक init.d स्क्रिप्ट बनाई।

मेरे 2 प्रश्न हैं जिन्हें मैं हल करना चाहूंगा:

  1. वहाँ init.d शेल स्क्रिप्ट से कुछ प्रक्रिया को जीवित रखने का एक तरीका है । क्या एक मानक / सर्वोत्तम तरीका अभ्यास है?

  2. यह एक प्रक्रिया को अनंत लूप के साथ जीवित रखने की सिफारिश की जाती है? मुझे लगता है कि इसे respawnहासिल करने के लिए कुछ कमांड का उपयोग करना बेहतर है। यह सही है?

मुझे respawnकमांड के अस्तित्व के बारे में पता है । मुझे लगता है कि मैं क्या जरूरत है, लेकिन मैं के बीच कार्यप्रवाह समझ में नहीं आता है /etc/init.d/और /etc/init। क्या कोई मेरी मदद कर सकता है?

नोट मैं न नवोदय inittab की जरूरत नहीं है कि (मैं केवल उपयोग करने की अनुमति दी हूँ /etc/init, /etc/init.d, cronके रूप में और सिस्टम उपकरण start-stop-daemon। मेरा मतलब है, केवल डिफ़ॉल्ट उपकरण)

आपके समय के लिए बहुत बहुत शुक्रिया!


संभव है कि शेल स्क्रिप्ट
ewwhite

जवाबों:


13

डेबियन के पास अंततः सिस्टमड होगा, इसलिए यह लिनक्स सिस्टम पर ऐसा करने का तरीका है जो सिस्टमड का उपयोग करता है (और कई पहले से ही करते हैं; आप वितरण को स्विच करने पर विचार कर सकते हैं)।

Systemd स्वचालित रूप से आपके लिए सेवा को जिंदा रख सकता है; किसी अन्य उपकरण की आवश्यकता नहीं है। बस यह सुनिश्चित करें कि Restart=alwaysसेवा फ़ाइल के [Service]अनुभाग में सेट किया गया है ।

# vi /etc/systemd/system/dtnd.service

[Service]
Restart=always
#...everything else...

अधिक जटिल परिदृश्यों के लिए कई अन्य विकल्प भी उपलब्ध हैं।


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

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

systemdलगता है कि init.dस्क्रिप्ट और आधार को त्याग दें*.service
yurenchen

2
सीधे संपादन के बजाय सुरक्षित का उपयोग करें systemctl edit myservice, systemctl daemon-reloadऔर फिर myservice को पुनरारंभ करें।
पाब्लो ए

@PabloBianchi यदि आप किसी मौजूदा सेवा की इकाई को ओवरराइड कर रहे हैं तो ओवरराइड बनाना ठीक है। यदि आप एक इकाई बना रहे हैं खरोंच से, जैसा कि ओपी ने किया है, तो यह व्यर्थ है।
माइकल हैम्पटन

3

आप इसे इसके /etc/inittabसाथ जोड़ सकते हैं respawn:

d1:2345:respawn:/path/to/your/first_daemon arg1 arg2
d2:2345:respawn:/path/to/your/second_daemon arg1 arg2

यह एक गंदा हैक है, लेकिन मैंने इसे पुराने sysv-init सिस्टम पर अतीत में इस्तेमाल किया है।


लेकिन क्या डेमोंस बैकली कैल सैटिड () और फोर्क () बैकग्राउंड में नहीं चलते हैं?
सिम्बियन

धन्यवाद! जैसा कि आप कहते हैं कि यह एक गंदा हैक है, लेकिन यह काम करता है। वैसे भी मैं systemd के उपयोग को प्राथमिकता देता हूं। अब मुझे इसके अस्तित्व के बारे में पता है।
एड्रियन एंटुनेज़

यह RHEL6 पर काम नहीं करता है। प्रतिक्रिया की उपयोगिता उपलब्ध नहीं लगती है।
जिदीउफ़

2

खैर, यह एक मुख्य कारण है, क्यों डेबियन सिस्टमड में जा रहा है।

sysvinit (/etc/init.d) यह पता लगाने में सक्षम नहीं है, अगर कोई सेवा नीचे है / जवाब नहीं दे रही है। इसका मतलब है कि आपको इन सेवाओं की निगरानी करनी होगी और आगे बढ़ाना होगा यदि कोई सेवा अब अपना काम नहीं करेगी।

शायद करने के लिए सबसे आसान काम एक और डेमॉन्थलर की तरह हो जाएगा, जैसे सिस्टमड (RHEL7 में डिफ़ॉल्ट, अगले डेबियन और ubuntu lts में डिफ़ॉल्ट होगा), अपस्टार्ट (आरएचईएल 6 में डिफ़ॉल्ट, 12.04 और 14.04), डेमोंटोसल्स (जैसा उल्लेख किया गया है, develloped द्वारा किया गया है) djb) या कुछ और।

एक सेवा को जिंदा रखने का काम करने से Sysvinit में PITA होगा।


1

सबसे अच्छा अभ्यास यह सुनिश्चित करना है कि आपके डेमन पहले स्थान पर स्टॉप न हों।

असफल होना कि आप डीजेबी के डेमोंटोल्स पर एक नज़र डाल सकते हैं


3
निश्चित रूप से सबसे अच्छा अभ्यास यह सुनिश्चित करना है कि मेरे डेमोंस बंद न हों। लेकिन ऐसे बहुत सारे एप्लिकेशन हैं जो अगर-आई-स्टॉप-वेक-अप एप्रोच 2, mysql, samba, pulseaudio जैसे फॉलो करते हैं ... मुझे डेमोंटोल्स की तलाश है और एक अच्छा अप्रोच लगता है। दुर्भाग्य से, मुझे बाहरी उपकरण स्थापित करने की अनुमति नहीं है। मुझे इसे bash scripting या start-stop-daemon और init.d configs का उपयोग करके करने की आवश्यकता है।
एड्रियन एंटुनेज़

1

मेरे लिए मानक दृष्टिकोण इसके लिए मौन उपयोगिता का उपयोग करना है ।

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


1
हाय ईश्वित, मुझे यह सुनिश्चित करना है कि मेरा आवेदन यह चल रहा है। दुर्भाग्य से, मुझे बाहरी उपकरण स्थापित करने की अनुमति नहीं है। मुझे इसे bash scripting या start-stop-daemon और init.d configs का उपयोग करके करने की आवश्यकता है।
एड्रियन एंटुनेज़

2
@ AdriánAntúnez यदि आपको अपने काम को करने के लिए आवश्यक उपकरण स्थापित करने की अनुमति नहीं है, तो आपको उस समस्या को जल्द से जल्द ठीक करना चाहिए।
माइकल हैम्पटन

@ AdriánAntúnez आपने "मानक" के लिए कहा। मोनीत बहुत प्रसिद्ध / अच्छी तरह से जाना जाता है। आपने "सर्वश्रेष्ठ" के लिए कहा ... आपका अवरोध राजनीतिक अधिक है। आपको सॉफ़्टवेयर स्थापित करने की अनुमति क्यों नहीं दी जाएगी?
ewwhite

1
यह एक अनावश्यक उपकरण या निर्भरता नहीं है अगर यह वही करता है जो आप इसे करना चाहते हैं
ewwhite

1
@ewwhite क्षमा करें, मेरा मतलब था कि बाहरी उपकरणों पर निर्भरता से बचें।
एड्रियन एंटुनेज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.