मैं स्टार्टअप पर "rc.local" कैसे चला सकता हूं?


75

मेरे पास एक स्क्रिप्ट है जिसे मैं शुरू करना चाहूंगा जब मेरा सिस्टम शुरू होगा। मैंने इसे "rc.local" पर रखा है, लेकिन यह काम नहीं करता है। मैं इसे स्टार्टअप पर चलाने के लिए कैसे सक्षम कर सकता हूं?


1
Xsetwacom कमांड कहाँ है? /etc/rc.local स्टार्टअप पर एक बहुत ही सरल पथ के साथ निष्पादित किया जाता है। यह संभवतः उस PATH से अलग है जिसे आपने टर्मिनल पर लॉग इन किया है। टर्मिनल में, टाइप करें -p xsetwacom फिर "xsetwacom" कमांड को /etc/rc.local में पूरे पथ के साथ "टाइप -p" द्वारा लौटाएं। क्या आपके लिए xsetwacom के काम करने से पहले आपको कोई मैनुअल इनिशियलाइज़ेशन करना होगा?
22

3
स्टार्टअप प्रबंधक के रूप में systemd का उपयोग करना सुनिश्चित करें कि r.local संगतता चल रही है:systemctl status rc-local.service
rubo77

वाल्टिनेटर की टिप्पणी मेरी समस्या थी। न्यूनतम पथ की वजह से, यह नहीं पता था कि जिन लिपियों को मैं चलाना चाहता था, उन्हें कैसे चलाना है। Runninig /etc/rc.local के समय मेरे उबंटू 14.04 सिस्टम पर लोड किया गया रास्ता निम्नलिखित था: / sbin: / usr / sbin: / bin: / usr / bin ... आप echo $PATH > /home/rc_local_pathअपने / अपने द्वारा डालकर चेक कर सकते थे आदि / rc.local और फिर यह स्टार्टअप पर चलाने के बाद फ़ाइल की जाँच कर रहा है।
RaisinBranCrunch

ध्यान रखें कि यदि आपकी स्क्रिप्ट को लगातार चलाने की आवश्यकता है, तो आपको इसेrc.local फ़ाइल में एक डेमॉन के रूप में शुरू करना होगा !
तात्यामेली

sudo systemctl enable rc-local.serviceयह सुनिश्चित करने के लिए उपयोग करें कि /etc/rc.local सर्वर स्टार्टअप के दौरान निष्पादित किया गया है
विलियम

जवाबों:


56

क्या आप अपनी स्क्रिप्ट मैन्युअल रूप से चला सकते हैं? यदि नहीं, तो यह उस स्क्रिप्ट की समस्या है; अन्यथा rc.local पर अधिक देखें। (यदि उस स्क्रिप्ट को रूट के रूप में चलाने की आवश्यकता है, तो आपको इसे मैन्युअल रूप से चलाने के लिए sudo का उपयोग करना होगा।)

सुनिश्चित करें कि /etc/rc.local निष्पादन योग्य है और यह स्क्रिप्ट जिसे कॉल करता है वह भी निष्पादन योग्य है।

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

सुनिश्चित करें कि r.local में एक शबंग रेखा है (जो डिफ़ॉल्ट है):

$ head -n1 /etc/rc.local
#!/bin/sh -e

हां, मैं स्क्रिप्ट को मैन्युअल रूप से चला सकता हूं। मैं यह कैसे सुनिश्चित कर सकता हूं कि /etc/rc.local निष्पादन योग्य है? मुझे क्या लिखना है? क्या यह "$ ls -l /etc/rc.local -rwxr-xr-x 1" है? धन्यवाद!
8

@pedroo: मैं वास्तव में कॉपी किया है कि मैं क्या देख मेरी टर्मिनल में (ताकि आप शीघ्र, इनपुट, और आउटपुट सब ऊपर देखें)। कमांड "ls -l /etc/rc.local" है और यदि यह निष्पादन योग्य है, तो इसमें आउटपुट में वे Xs होंगे।

3
मैंने "ls -l /etc/rc.local" की कोशिश की है और यह निष्पादन योग्य है, लेकिन मैं इसे स्टार्टअप पर नहीं चला सकता ... कोई विचार?
पेड्रो

1
@pedroo: कि X सर्वर को चलाने की जरूरत है, जो तब नहीं होता है जब rc.local निष्पादित होता है। इसे r.local से चलाने से यह बिना कुछ किए बस बाहर निकल जाएगा (हालांकि मुझे आशा है कि यह किसी संदेश को syslog या कहीं और रखता है)। इसके बजाय आपको xsetwacom कमांड को ~ / .xinitrc या / etc / X / xinit / xinitrc में डालने की आवश्यकता है।

1
@pedroo: क्योंकि rc.local में एक अलग समय पर चलने के उद्देश्य वाले कमांड होते हैं। एक नई फ़ाइल बनाएं, आप इसे ~ / बिन में रख सकते हैं , इसे निष्पादन योग्य (नौटिलस में चामोद या गुण) चिह्नित कर सकते हैं, पहली पंक्ति "#! / बिन / बैश" बना सकते हैं, फिर बाद की पंक्तियों पर अपनी कमांड डाल सकते हैं।

53

मेरे मामले में कोई भी निर्देश सही समाधान नहीं था। यदि आप मेरे जैसे अशुभ थे, तो इसे विस्तृत करने का प्रयास करें

  1. अपने सभी निष्पादित कोड को एक अलग पाठ फ़ाइल में एक मनमाने नाम जैसे foo.sh के साथ रखें और इसे एक अनियंत्रित स्थान पर सहेजें।
  2. जोड़ना

    #!/bin/sh

    आपके कोड की पहली पंक्ति के रूप में।

  3. अपने foo.sh द्वारा निष्पादित करने का प्रयास करें

    sudo foo.sh

    जाँच करने के लिए कोई त्रुटि नहीं हैं।

  4. पूरे कमांड के साथ अपनी /etc/rc.local स्क्रिप्ट प्रदान करें और sh कमांड के बाद अपनी बनाई गई स्क्रिप्ट का नाम दें

    sh '/path/to/your/script/foo.sh'
  5. कोड की अंतिम पंक्ति से पहले उपरोक्त लाइन रखना याद रखें

    exit 0

    /etc/rc.local स्क्रिप्ट के अंत में।

  6. /Etc/rc.local की पहली पंक्ति की जाँच करें

    #!/bin/sh -e
  7. अपने /etc/rc.local निष्पादन योग्य को उस स्थिति में बनाएं जब वह पहले से निष्पादन योग्य नहीं है

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
  8. निष्पादित करके सब कुछ ठीक काम करता है की जाँच करें

    sudo /etc/init.d/rc.local start
  9. टेस्ट अपने सिस्टम को रीस्टार्ट करें।

6
चरण # 8 कुंजी थी, यह सत्यापित करते हुए कि स्क्रिप्ट स्टार्टअप वातावरण में चलेगी। मेरे मामले में मुझे कमांड को पूरा रास्ता देने की आवश्यकता है।
पीटर ग्लुक

प्रीफेक्ट और स्टेप ग्रेट स्टेप्स, यह सेंटो पर काम करता है, लेकिन sudo /etc/rc.local startपहले चलता है।
A1Gard

धन्यवाद - इस ब्रेक डाउन ने वास्तव में मेरे लिए मदद की और जैसा कि चरण # 8 मेरे लिए भी महत्वपूर्ण था! इसके बिना यह +1 (संदर्भ के लिए , निरंतर चलने के लिए हमेशा के लिए बिटमनी क्लाउड सर्वर पर चलने वाले नोड ऐप के लिए) को रीडायरेक्ट नहीं करता है ।
fidev

चरण 8 एक अच्छा टिप था, लेकिन मुझे लगता है कि चरण 7 क्या निश्चित हो सकता है मेरा, मैं एक सुरंग खोलने के लिए क्रोन का उपयोग करके स्क्रिप्ट को चलाने की कोशिश कर रहा था, लेकिन यह बेतरतीब ढंग से विफल हो रहा था
सीन क्लिंट

28

नए उबंटू संस्करणों systemdपर उपयोग किया जाता है और /etc/rc.localइसे हमेशा डिफ़ॉल्ट रूप से लोड नहीं किया जाता है।

जांचें कि क्या संगतता सेवा लोड है

systemctl status rc-local.service

स्क्रीनशॉट

यदि इसमें सक्रिय (बाहर) है तो आपकी सेटिंग ठीक है और आपकी /etc/rc.localफ़ाइल में एक और त्रुटि हो सकती है (यह एक कमांड हो सकती है जो उदाहरण के लिए विफल हो सकती है)।


4
अगर rc-local.service सक्रिय नहीं है, तो इस पोस्ट की जाँच करें जो बताता है कि Systemd के साथ /etc/rc.local को कैसे सक्षम करें
yaitloutou

3

2 सुझाव।

  1. सुनिश्चित करें कि लक्ष्य स्क्रिप्ट फ़ाइल निष्पादन योग्य भी चिह्नित है।
  2. क्या लक्ष्य लिपि एक सुडोल कमांड चला रही है ? यदि आप ऐसा करने के लिए sudo पासवर्ड की आपूर्ति करना चाहते हैं।

मेरी गलती। बस एक जांच करें। सुधार के लिए धन्यवाद enzotib :)


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