मैं बूट पर /etc/init.d में स्क्रिप्ट कैसे बना सकता हूं?


83

मुझे लगता है कि मैंने इस बारे में कुछ समय पहले पढ़ा था, लेकिन मुझे याद नहीं है कि यह कैसे किया जाता है। अनिवार्य रूप से, मेरे पास एक सेवा है /etc/init.dजिसमें मैं बूट समय पर स्वचालित रूप से शुरू करना चाहता हूं। मुझे याद है कि इसे स्क्रिप्ट को /etc/rc.dडायरेक्टरी में समरूप करने के साथ कुछ करना है , लेकिन मैं वर्तमान में याद नहीं रख सकता। इसके लिए क्या आज्ञा है?

मेरा मानना ​​है कि मैं फेडोरा / सेंटोस व्युत्पन्न पर हूं।


जो आपके OS पर निर्भर करता है। क्या यूनिक्स संस्करण आप चला रहे हैं, और यदि लिनक्स, क्या वितरण? कौन सा बीच /etc/init, /etc/init.d, /etc/rc.d, /etc/rc.localऔर कुछ और यह है?
गाइल्स

1
मुझे लगता है कि मैं CentOS या इसके जैसे कुछ पर हूँ। क्या डेबियन के लिए उत्तर अलग होगा? मैं डेबियन के लिए एक समाधान में भी दिलचस्पी रखता हूं।
नत्फ़ुली के

जवाबों:


109

यदि आप एक Red Hat आधारित प्रणाली पर हैं, जैसा कि आपने उल्लेख किया है, आप निम्नलिखित कार्य कर सकते हैं:

  1. एक स्क्रिप्ट बनाएं और /etc/init.d(जैसे /etc/init.d/myscript) जगह दें । स्क्रिप्ट में निम्न प्रारूप होना चाहिए:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

प्रारूप बहुत मानक है और आप मौजूदा स्क्रिप्ट देख सकते हैं /etc/init.d। फिर आप स्क्रिप्ट का उपयोग कर सकते हैं जैसे /etc/init.d/myscript startया chkconfig myscript startckconfigआदमी पेज स्क्रिप्ट के शीर्षक बताते हैं:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

उदाहरण प्रारंभ, रोक और स्थिति कोड में परिभाषित सहायक कार्यों का उपयोग करता है /etc/init.d/functions

  1. स्क्रिप्ट सक्षम करें

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. स्क्रिप्ट की जांच करें वास्तव में सक्षम है - आपको आपके द्वारा चुने गए स्तरों के लिए "पर" देखना चाहिए।

    $ chkconfig --list | grep myscript
    

3
चकोन्फिग क्या आप चाहते हैं। +1
whoami

रनवेवेल्स 2, 3, 4 और 5 में कुछ क्यों शुरू होता है? रनलेवल 2 पर सर्वर शुरू करने से बचने के लिए आपको ध्यान रखने की ज़रूरत नहीं है? और रनवे 4 को आरएचईएल पर वैसे भी परिभाषित नहीं किया गया है, इसलिए इसे रनवे पर शुरू करने की कोशिश क्यों की जाती है? आलोचना नहीं, सिर्फ जानने की इच्छा। मैं एक देशी Slackware उपयोगकर्ता हूँ।
ब्रूस एडगर

4 आरएचईएल पर परिभाषित नहीं है, लेकिन यह मौजूद नहीं है। आप इसे अपनी चीजों के लिए चुरा सकते हैं।
केविन एम।

हेडर chkconfig मैन पेज से लिया गया है। मैं व्यक्तिगत रूप से ज्यादातर मामलों में 235 या सिर्फ 35 के साथ रहता हूं।
केन

क्या कोई लॉग है जो मैं देख सकता हूं कि क्या स्टार्टअप के दौरान कुछ शुरू नहीं होता है?
उत्कर्ष सिन्हा

10

आप परीक्षण करते हैं, सामान्य रूप से आपकी मशीन किस रनवे पर चलती है।

runlevel

अक्सर यह 5 या 2 होता है - विभिन्न सम्मेलन होते हैं, लेकिन वास्तव में स्थापित, अफीक कुछ भी नहीं। Ubuntu 2 का उपयोग करता है, जबकि पूर्व वितरण मैं हमेशा उपयोग करता था

  • 1 एकल उपयोगकर्ता (सुपर उपयोगकर्ता)
  • 2 बहु उपयोगकर्ता
  • 3 बहु उपयोगकर्ता + नेटवर्क
  • 4 का उपयोग नहीं किया / उपयोगकर्ता निश्चित
  • 5 बहु उपयोगकर्ता, नेटवर्क + X11

तब आप अपने init-script से एक सिमिलिंक बनाते हैं, हो सकता /etc/init.d/foobarहै/etc/rc2.d/SXYfoobar

S का अर्थ है 'इस रनलेवल में यह स्क्रिप्ट शुरू करें (यहाँ: 2)। XY एक दो अंकों की दशमलव संख्या है, जो अनुक्रम के लिए प्रासंगिक है, स्क्रिप्ट शुरू हो गई हैं।

यदि आप स्क्रिप्ट S45barfoo से पहले चलाने के लिए निर्भर करते हैं, और S55foofoo आपकी स्क्रिप्ट पर निर्भर करता है, तो आप 45 और 55 के बीच xy चुनेंगे। समान संख्या के लिए बूट ऑर्डर अपरिभाषित है।

उबंटू इस बीच एक और स्टार्टअप प्रक्रिया में स्विच किया जा रहा है (जिसे स्विच कर रहा है) upstart

और ध्यान दें: हमेशा लिंक लिंक नहीं होता है /etc/rcX.d- कभी-कभी यह /etc/init/rcX.dया ऐसा ही कुछ होता है, लेकिन इसे खोजने में आसान होना चाहिए, कहीं नीचे / आदि।

यदि आप शुरुआती स्क्रिप्ट के अंत में कुछ शुरू करना चाहते हैं, /etc/rc.localतो देखने के लिए फ़ाइल होगी, लेकिन अगर यह पहले से चल रहे X11 पर निर्भर करता है, तो आप अपने डेस्कटॉप वातावरण के एक ऑटोस्टार्ट-विकल्प की तलाश कर सकते हैं, या /etc/X11/Xsession.d/इसी तरह के पैटर्न के साथ वर्णित किया जा सकता है। ऊपर।

यदि आप नेटवर्क के ऊपर निर्भर करते हैं, तो एक अलग निर्देशिका (if-up.d) है, और बाहरी USB- ड्राइव जैसे माउंटेड डिवाइस के लिए /etc/udev/rules.d/


क्या कोई ऐसा आदेश नहीं है जो आपके लिए सहानुभूति रखता हो? मुझे लगा कि मुझे ऐसा कुछ याद है।
नफ्तुली के सिप 9'11

1
नहीं था update-rc.d?
Naftuli Kay

जीयूआई या कमांडलाइन? आपका DE रनरवेल्स को चिह्नित करने के लिए एक उपकरण प्रदान कर सकता है, जहां आपकी स्क्रिप्ट को शुरू या बंद करना है। मैंने ऐसा कुछ देखा है, लेकिन एक नाम याद नहीं है, और संख्या (xy) कैसे निर्दिष्ट करें।
उपयोगकर्ता अज्ञात

कमांड लाइन। यह आपके लिए सिम्लिंकिंग को संभालता है और आपको कुछ स्क्रिप्ट चलाने या न होने पर स्विच को फ्लिप करने की अनुमति देता है।
Naftuli Kay

3

जैसा कि Naftuli Tzvi Kay ने ऊपर दिए गए डेबियन के बारे में पूछा: डेबियन 6 से शुरुआत करते हुए, आपकी स्क्रिप्ट में एक एलएसबी (लिनक्स स्टैंडर्ड बेस) हेडर होना चाहिए जो इसकी निर्भरता और क्षमताओं को दर्शाता है ( डेबियन विकी पेज देखें )।

यदि एलएसबी हेडर मौजूद है, तो आप insservबूट प्रक्रिया में अपनी स्क्रिप्ट को शामिल करने के लिए उपयोग कर सकते हैं ( एक अन्य डेबियन विकी पृष्ठ देखें )।

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