/Etc/rc.local का उद्देश्य और विशिष्ट उपयोग


73

हेडर इस तरह दिखता है:

#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.

इस फ़ाइल का कारण क्या है (इसमें बहुत अधिक नहीं है), और आप आमतौर पर इसमें क्या कमांड डालते हैं? "मल्टीसियर रनवेल" क्या है? (मुझे लगता rcहै "रन कमांड" है?)


2
मुझे नहीं पता कि यह फ़ाइल का "आधिकारिक" उद्देश्य है, लेकिन मुझे पता चला कि मैं फ़ाइल का उपयोग स्टार्टअप पर क्या कर सकता हूं, और इसके लिए सुपर उपयोगकर्ता की आवश्यकता होगी, लेकिन पासवर्ड प्रदान किए बिना । जिसमें आमतौर पर रंग, कीबोर्ड और ऐसे अन्य सामान शामिल होंगे। कुछ उदाहरण यहां देखें
इमानुएल बर्ग

जवाबों:


66

एक रनलेवल सिस्टम की एक स्थिति है, जो दर्शाता है कि यह बूट करने या रिबूट करने या बंद करने की प्रक्रिया में है, या एकल-उपयोगकर्ता मोड में है, या सामान्य रूप से चल रहा है। पारंपरिक init प्रोग्राम इन कार्यों को संबंधित रनवे पर स्विच करके संभालता है। लिनक्स के तहत, रनलेवल्स सम्मेलन द्वारा हैं :

  • एस बूट करते समय,
  • 0 बंद करते समय,
  • रिबूट करते समय 6,
  • एकल-उपयोगकर्ता मोड में 1 और
  • सामान्य ऑपरेशन में 5 के माध्यम से 2।

रनवेवेल्स 2 को 5 के माध्यम से मल्टीएयर रनलेवल्स के रूप में जाना जाता है क्योंकि वे रनवेल 1 के विपरीत कई उपयोगकर्ताओं को लॉग इन करने की अनुमति देते हैं, जो केवल सिस्टम व्यवस्थापक के लिए अभिप्रेत है।

जब रनलेवल परिवर्तन, init चलाता rc स्क्रिप्ट (एक पारंपरिक init साथ सिस्टम पर - वहाँ इस तरह के रूप विकल्प, कर रहे हैं कल का नवाब और systemd )। ये आरसी स्क्रिप्ट आमतौर पर सिस्टम सेवाओं को शुरू और रोकती हैं, और वितरण द्वारा प्रदान की जाती हैं।

स्क्रिप्ट /etc/rc.localसिस्टम व्यवस्थापक द्वारा उपयोग के लिए है। यह सभी सामान्य प्रणाली सेवाओं को शुरू करने के बाद पारंपरिक रूप से निष्पादित किया जाता है, एक मल्टीसियर रनवे पर स्विच करने की प्रक्रिया के अंत में। आप इसका उपयोग कस्टम सेवा शुरू करने के लिए कर सकते हैं, उदाहरण के लिए एक सर्वर जो इसमें स्थापित है /usr/local। अधिकांश प्रतिष्ठानों की आवश्यकता नहीं है /etc/rc.local, यह उन मामलों के अल्पसंख्यक के लिए प्रदान किया जाता है जहां इसकी आवश्यकता होती है।


2
मुझे आज पता चला है कि वर्तमान FreeBSD पर, rc.local बहुत जल्दी निष्पादित हो सकता है। निश्चित रूप से सभी सामान्य सिस्टम सेवाएं शुरू होने के बाद नहीं। मैं एक बीप चाहता था जब एक हेडलेस मशीन तक sshd पहुँच उपलब्ध हो जाए, और rc.localइस कारण से उपयुक्त नहीं था। चूंकि मूल प्रश्न डेबियन के बारे में है, यह टिप्पणी संभवतः ओपी के लिए अप्रासंगिक है।
MvG

1
@MvG जानकारी के लिए धन्यवाद। rc.localपरंपरागत रूप से अंतिम रूप से चलाया गया था, लेकिन मैं देख रहा हूं कि FreeBSD ने ऐसा करना बंद कर दिया, जब वे एक निर्भरता-आधारित प्रणाली में बदल गए। आप पर ध्यान दें, भले ही rc.localइसके बाद आह्वान किया गया हो /etc/rc.d/sshd, जो पूरी तरह से काम नहीं करेगा: प्रक्रिया शुरू rc.localहोने के बाद जल्द ही sshdइसे लागू किया जाएगा, यह sshdनेटवर्क सुनने के लिए शुरू होने से पहले ही लागू किया जा सकता है (लेकिन हम एक दूसरे के दसवें भाग पर बात करेंगे एक विशिष्ट सेटअप में)।
गाइल्स

मैं इसे lxc कंटेनरों के लिए नेटवर्क सेट करने और ऑटो स्टार्ट करने के लिए उपयोग करने की कोशिश कर रहा हूं। लेकिन इसके बाद रुक जाता है iptables-apply /root/iptables। मैं यह पता लगाने की प्रक्रिया में हूं कि क्या गलत है (अगले रिबूट की प्रतीक्षा)। लेकिन अगर आपको कोई सुझाव मिला है, तो मैं सभी कानों के पास हूं।
x- यूरी

1
@ x-yuri आपके द्वारा यहां पोस्ट की गई जानकारी से अधिक जानकारी की आवश्यकता है। मैं यह भी नहीं जानता कि "यह" क्या "बंद" होता है। एक नया प्रश्न पूछें जो बताता है कि आपने क्या किया।
गाइल्स

14

rc "रन-कंट्रोल" को दर्शाता है,

multiuserरनलेवल स्तर है जिस पर नेटवर्किंग उपलब्ध है और इस तरह सर्वर से कनेक्शन को कड़ी मेहनत से तार कंसोल कनेक्शन के एवज में उन सेवाओं का उपयोग किया जा सकता है के रूप में परिभाषित किया जाएगा।

आपका ध्यान रखें, सर्वर आमतौर पर एक सेवा प्रोसेसर (विभिन्न नामों के तहत) द्वारा प्रबंधित होते हैं जो नेटवर्क कनेक्शन का समर्थन करते हैं और बदले में ऐसा करते हैं जैसे कि आपके पास वास्तव में हार्ड-वायर्ड कंसोल था।

के रूप में rc.localफ़ाइल, यह आप "स्थानीय" (साइट विशिष्ट) वस्तुओं (डेमॉन और / या एक बार-एट-बूट स्क्रिप्ट) आप शुरू करना चाहते के सभी निर्दिष्ट करने के लिए अनुमति देने के लिए एक सुविधा है। आप इस प्रतिमान का उपयोग करने का विकल्प चुन सकते हैं या वास्तव में '/etc/init.d' को शुरू / बंद लिपियों के साथ उचित रूप से आबाद कर सकते हैं।


1
ठीक है, लेकिन फ़ाइल वहां क्यों है, और आप इसे आम तौर पर कब इस्तेमाल करते हैं, और कैसे (उदाहरण के लिए, क्या कमांड इसे डालने के लिए समझ में आता है)?
इमानुएल बर्ग

4

मैं मुख्य रूप से दो चीजों के लिए इसका उपयोग करता हूं:

  1. हर रिबूट की तारीख और कर्नेल संस्करण को लॉग करने के लिए। एक सरल वन-लाइनर जिसे सिस्टम में आसानी से जोड़ा जा सकता है, जिसमें कोई सामान भरा हुआ नहीं है ... और बूट इतिहास के कम चलने का खतरा है uptimed

  2. पुराने /etc/rc.boot/ निर्देशिका को पुनर्जीवित करने के लिए जो कुछ साल पहले तक डेबियन में हुआ करती थी। मेरे पास अभी भी कुछ सरल स्क्रिप्ट हैं जो एक init.d स्क्रिप्ट के रूप में पुनर्लेखन के प्रयास के लायक नहीं हैं (उदाहरण के लिए, रूट को dmesg मेल करने के लिए एक Q & D स्क्रिप्ट, और एक अन्य जिसे पढ़ने के लिए सेट करने के लिए निष्क्रिय स्पिंडाउन और ब्लॉकदेव को अक्षम करने के लिए hdaparm का उपयोग करना है- आगे का आकार), और अन्य सभी बूट-टाइम स्क्रिप्ट के बाद मैं उनके लिए खुश हूं।

जैसे

echo "$(date +%s),$(date),$(uname -a)"  >> /var/log/reboot.log

[ -d /etc/rc.boot ] && run-parts /etc/rc.boot

इसके अलावा, मैंने इस वर्ष की शुरुआत में सेंट और डेबियन डिस्ट्रोस के लिए /etc/rc.local स्क्रिप्ट्स लिखीं, जो ओपनस्टैक (2 http://169.254.169.254/) से ec2-शैली मेटाडेटा प्राप्त करने के लिए ताकि VMs को अपना IP, hostname, ssh कुंजियाँ और अन्य उदाहरण-विशिष्ट जानकारी मिलें । क्लाउड-इनिट के बाद से इन डिस्ट्रो को पोर्ट किया गया है, इसलिए स्क्रिप्ट अब अप्रचलित हैं।


3

rc.localपर फ़ाइल डेबियन ज्यादातर गैर init शैली सिस्टम के साथ संगतता के लिए है। आपको इसका उपयोग नहीं करना चाहिए।

इसके बजाय, यह अनुशंसा की जाती है कि आप /etc/init.d/Skeletonरनवे को बदलते समय जो कुछ भी करना चाहते हैं उसके लिए एक नई इनिट स्क्रिप्ट की प्रतिलिपि बनाएँ , फिर inservइसे सक्षम करने के लिए उपयोग करें।


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


unix.stackexchange.com/a/480897/5132 /etc/init.d/skeleton रास्ता नहीं है।
जेडीबीपी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.