/Etc/rc.local में कमांड को स्टार्टअप के दौरान क्यों नहीं निष्पादित किया जाता है?


39

मेरी /etc/rc.localस्क्रिप्ट में एक ही कमांड है जो स्टार्टअप के दौरान टिनी टिनी आरएसएस के लिए अपडेट डेमॉन शुरू करने वाली है , लेकिन स्टार्टअप के दौरान स्क्रिप्ट निष्पादित नहीं की जाती है। क्यूं कर?

संपूर्ण /etc/rc.local फ़ाइल:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local निष्पादन योग्य है:

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local मौजूद है और निष्पादन योग्य है:

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local इस रनवे के लिए स्टार्टअप पर क्रियान्वित होना चाहिए:

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

अगर मैं मैन्युअल रूप से /etc/rc.local को कमांड लाइन से update_daemon लोड ...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

... जिसे मुझे हर बार याद रखना होगा कि मेरा सर्वर इस समस्या के ठीक होने तक फिर से शुरू होता है।

इसी तरह के प्रश्न पहले से ही मौजूद हैं, लेकिन अभी तक मैं अपनी विशिष्ट समस्या के भीतर जानकारी को लागू करने में असमर्थ रहा हूं।

स्टार्टअप के दौरान rc.local में कमांड को निष्पादित क्यों नहीं किया जाता है?


requirettyसेटिंग के कारण हो सकता है । जब आप लॉग-इन करते हैं, तो आप TTY में स्क्रिप्ट निष्पादित कर रहे हैं, लेकिन सिस्टम बूट के दौरान, यह TTY में नहीं है। यह लिंक आपको shell-tips.com/2014/09/08/… धन्यवाद की सहायता कर सकता है ।
KICT

जवाबों:


23

rc.localस्क्रिप्ट तब निकलती है जब उसके किसी भी कमांड को निष्पादित करते समय कोई त्रुटि होती है ( -eध्वज का उल्लेख करें #!/bin/sh -e)।

यह संभव है कि जब आप कार्य rc.localनिष्पादित करते हैं, तो आपके आदेश को चलाने के लिए कुछ आवश्यक शर्तें पूरी नहीं की जाती हैं , इसलिए आपका आदेश निष्पादित नहीं हो पाता है।

मैन्युअल रूप से cpu गवर्नर सेट करते समय और ऐसा करने में असफल रहने पर मुझे एक ही बात का सामना करना पड़ा rc.local। यहां मेरा कस्टम वर्कअराउंड है, जो update-rc.dआपके कमांड को स्टार्टअप पर चलाने के लिए उपयोग करता है:

  1. एक शीर्षक के साथ myscript.shनिर्देशिका में एक फ़ाइल बनाएँ /etc/init.d:#!/bin/sh
  2. सामग्री के रूप में अपने कस्टम कमांड रखें
  3. इसे निष्पादित करें: sudo chmod +x /etc/init.d/myscript.sh
  4. विभिन्न रनलेवल्स के लिए अपनी स्क्रिप्ट के लिए सिम्लिंक बनाएं: sudo update-rc.d myscript.sh defaults

इसके अलावा, आप /etc/network/if-up.dस्क्रिप्ट की जांच कर सकते हैं और देख सकते हैं कि क्या नेटवर्किंग शुरू होने पर आप अपने आदेशों को ट्रिगर कर सकते हैं।


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

कृपया बताएं कि चरण -4 क्या करता है? मैं नया हूंupdate-rc.d
मोहित 7548

7

मुझे आरकॉम में कुछ ऐसी ही समस्या थी, स्टार्टअप पर अमल नहीं करना

sshades ने मुझे निम्नलिखित उत्तर दिया:

उबंटू अब सिस्टमड का उपयोग कर रहा है, और r.local को अब एक सेवा माना जाता है जो डिफ़ॉल्ट रूप से "बंद" है। आप निम्न आदेश दर्ज करके और रीबूट करके rc.local को "चालू" कर सकते हैं:

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

हालांकि मैंने उसके समाधान का परीक्षण नहीं किया है, मुझे लगता है कि यह तर्कसंगत लगता है और काम करेगा। तथापि :

मुझे एक समाधान भी मिला जो स्क्रिप्ट को जोड़ने के लिए ./config/autostart-scripts/ पर ट्रिक करेगा


7
यह त्रुटि हो रही है। यूनिट फ़ाइलों में कोई इंस्टॉलेशन कॉन्फिगरेशन (WantedBy, RequiredBy, इसके अलावा, [इंस्टाल] सेक्शन में एलियास सेटिंग्स और टेम्प्लेट यूनिट्स के लिए DefaultInstance) है। इसका मतलब यह है कि वे systemctl का उपयोग करने में सक्षम नहीं हैं। इस प्रकार की इकाइयाँ होने के संभावित कारण इस प्रकार हैं: 1) एक इकाई को किसी अन्य इकाई के .wants / या .requires / निर्देशिका से सहानुभूतिपूर्वक सक्षम किया जा सकता है। 2) एक इकाई का उद्देश्य किसी अन्य इकाई के लिए सहायक के रूप में कार्य करना हो सकता है जिसकी उस पर आवश्यकता निर्भरता है।
रवाफत एर्डेम साहिन

मुझे भी यह त्रुटि हो रही है। यदि rc.localबंद कर दिया जाता है, तो विकल्प क्या है?
बेन

5

कोशिश sudo sysv-rc-confकरें और यह देखें यदि rc.localसक्षम किया गया है

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]

हाँ, यह सक्षम है।
xx

क्या इस आदेश को स्थापित करने की आवश्यकता है?
jcollum

1
@jcollum हाँ, यह उसी नाम के पैकेज से एक प्रोग्राम है। स्थापित करने के लिए, टाइप करेंsudo apt install sysv-rc-conf
banan3'14

rc.localमेरी सेवाओं की सूची में भी नहीं है!
बेन

5

सुनिश्चित करें कि r.local स्क्रिप्ट निष्पादन योग्य है:

sudo chmod +x /etc/rc.local

फिर, इसे सक्षम करें:

sudo systemctl enable rc-local.service

सिस्टम को रिबूट करें या स्क्रिप्ट को मैन्युअल रूप से चालू करें:

sudo systemctl start  rc-local.service

सेवा की स्थिति को चलाकर प्रदर्शित किया जा सकता है:

$ sudo systemctl status rc-local.service
 rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service

आपको मैन्युअल रूप से सेवा को सक्षम करने की आवश्यकता नहीं है। यदि फ़ाइल मौजूद है और निष्पादन योग्य है, तो systemd स्वचालित रूप से rc-localसेवा को सक्षम कर देगा ।
मूरू

4

परिवार कल्याण नियमों को लोड करने वाले कुछ होस्ट किए गए सर्वरों पर हमें यह समस्या थी।

इन बक्सों पर वे बहुत जल्दी रीबूट करते हैं और हमने पाया कि लोड स्टेटमेंट्स को ठीक करने के लिए लगता है कि इससे पहले कि रिकॉल में एक "स्लीप 1" डाल दिया जाए। मुझे लगता है कि यह परिवार कल्याण नियमों को लोड करने से पहले इंटरफेस को व्यवस्थित करने के लिए थोड़ा समय देता है।


1
धन्यवाद। sleep 1मेरी समस्या हल कर दी। दिलचस्प है कि मेरे पास बहुत सारे सर्वर हैं लेकिन केवल एक को यह समस्या है।
कियान चेन

1

मैंने एक बार rc.localविंडोज में नोटपैड के साथ एडिट किया और उसे यह समस्या होने लगी।

इस मामले में, एक पाठ संपादक का उपयोग ईओएल रूपांतरण का समर्थन करता है, जैसे नोटपैड ++, ईओएल शैली को 'यूनिक्स' में बदलने के लिए, इसे हल कर सकता है।

आप इसे :set ff=unixविम में भी कर सकते हैं ।


1

मैं Ubuntu lxc कंटेनरों में पाया कि अगर r rllocal में पूरी तरह से सही शेबंग उदा है

#!/bin/sh

यह विफल रहता है, लेकिन यदि आप शेबंग को हटाते हैं तो यह काम करता है।

क्यों या किस शेल का उपयोग करने के लिए नीचे नहीं मिला, मुझे लगता है कि यह पहले गैर-शून्य पर भी बम रखता है। (अन्य उबंटू में उचित शेबंग एक मुद्दा नहीं है)


0

आपको यह सुनिश्चित करना होगा कि /etc/rc.localकमांड के साथ सर्वर स्टार्टअप के दौरान निष्पादित किया गया है:

sudo systemctl enable rc-local.service

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