स्टार्टअप पर शेल स्क्रिप्ट कैसे निष्पादित करें?


13

मैंने सर्वर (मेरा पहला प्रश्न) शुरू करने के लिए एक स्क्रिप्ट बनाई है। अब मैं चाहता हूं कि यह सिस्टम बूट पर चले और परिभाषित सर्वर को शुरू करे। इसे पूरा करने के लिए मुझे क्या करना चाहिए?

मेरे निष्कर्ष मुझे बताते हैं कि इस फ़ाइल को /etc/init.dस्थान पर रखें, और यह तब निष्पादित होगा जब सिस्टम बूट होगा। लेकिन मैं समझ नहीं पा रहा हूं कि स्टार्टअप पर पहला तर्क कैसे होगा start? क्या यह पूर्वनिर्धारित के startरूप में उपयोग करने के लिए कहीं है $1? यदि मैं एक ऐसा मामला रखना चाहता हूं startallजो स्क्रिप्ट में सभी सर्वरों को शुरू करेगा, तो मेरे पास कौन से विकल्प हो सकते हैं?

मेरी स्क्रिप्ट इस तरह है:

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac

मुझे पता है कि यह पुराना है ... लेकिन शेल '#! / बिन / श' नहीं '# होना चाहिए!' (जैसे / usr / lib को माउंट नहीं किया जा रहा है)
रिच होमोलका

जवाबों:


19

/etc/init.dस्क्रिप्ट निर्देशिका है, जिसमें निष्पादन योग्य स्क्रिप्ट दिखाई देते हैं। हालाँकि, आपके सिस्टम के शुरू होने के बाद किसी विशेष क्रम में स्क्रिप्ट चलाने के लिए, आपको /etc/rc#.dनिर्देशिका में फ़ाइलों को जोड़ना होगा । यहां दिखाई देने वाली प्रविष्टियाँ आपके सिस्टम को बताती हैं कि किस क्रम में और किस स्तर की स्क्रिप्ट को /etc/init.dचलाना चाहिए। आरसी के बाद की संख्या इंगित करती है कि इस चार्ट के अनुसार मशीन किस रन स्तर पर चल रही है:

http://en.wikipedia.org/wiki/Runlevel

इसलिए यदि आपके पास:

/etc/init.d/importantscript

तब आपको (खाली) फ़ाइलों की आवश्यकता होती है:

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript

S का अर्थ है प्रारंभ, और K का अर्थ है मारना। जब आपकी मशीन शुरू होती है, तो सिस्टम "आह, मैं RunLevel 3 पर चल रहा हूं, चलो rc3.d पर पॉप करने के लिए देखें कि '/etc/init.d' में कौन सी स्क्रिप्ट को चलाने की जरूरत है और किस क्रम में है।" इस स्थिति में, सिस्टम 'S' और फिर 'S' के बाद वाले नंबर को छाँटेगा और '/etc/init.d/importantscript start' को निष्पादित करेगा। 20 सिर्फ ऑर्डर देने के लिए है ... आपकी स्क्रिप्ट 'S19' के पीछे और 'S21' के सामने चलेगी। आप बस इन फ़ाइलों को बना सकते हैं:

sudo touch /etc/rc.d/rc3.d/S20importantscript

यहाँ एक अच्छा सारांश है: http://www.linux.com/news/enterprise/systems-management/8116-an-introduction-to-services-runlevels-and-rcd-scripts


यह "ln -s /etc/init.d/script" से rcX.d / * के लिए अधिक सामान्य नहीं है?
ओजमा

8

आपके पास --- और नहीं होना चाहिए --- में फ़ाइलें बनाएँ /etc/rc.d/rcN.d/; इसके बजाय आपको क्या करना चाहिए, यह आपके init स्क्रिप्ट रीडिंग में एक टिप्पणी है

# chkconfig NNN A B

जहां NNNरनलेवलों जिसमें आप स्क्रिप्ट सक्रिय चाहते हैं (उदाहरण के लिए, का सेट है 345अगर यह रनलेवलों में सक्रिय है 3, 4और 5), और Aऔर Bशुरू और बंद प्राथमिकताएं हैं। फिर chkconfig --add foo(अपनी स्क्रिप्ट का नाम दिया गया है foo) /etc/rc.d/rcN.d/उपयुक्त नामों के साथ फाइल बनाएंगे ।

इसके बाद आप उपयोग कर सकते हैं service foo barभेजने के लिए barअपनी स्क्रिप्ट के लिए संदेश (जैसे, start, stop, जो कुछ भी - कि जहाँ आपके है $1से आता है)।


0

$ 1 कमांड लाइन तर्क है जिसे आपकी स्क्रिप्ट में पास किया गया है, यह प्रारंभ, रोक या पुनरारंभ में से एक है। में openSUSE , मैं, जब रनलेवल संपादक thingy का उपयोग स्क्रिप्ट में अन्य तर्कों पारित करने के लिए तो मुझे लगता है कि इन शायद ही लोगों को आप का उपयोग करना चाहिए रहे हैं एक विकल्प होने याद नहीं है।

मैं खुद CentOS का उपयोग नहीं करता हूं, लेकिन ऐसा लगता है कि रनवेवेल को शुरू करने वाले कार्यक्रम को नियंत्रित करने के लिए ntsysv है

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