मैं Ubuntu 16.10 पर स्टार्टअप (r.local वैकल्पिक) पर कमांड कैसे निष्पादित कर सकता हूं


49

मैं अपने लाइनकोड सर्वर पर Ubuntu 16.10 पर कोटा स्थापित कर रहा हूं, और मुझे निम्न त्रुटि मिलती है

मूर्ति () माउंटेड डिवाइस / देव / रूट नहीं कर सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं

तो इसे ठीक करने के लिए, मैं इस धागे को उस फिक्स के लिए पहुंचा, जिसे जोड़कर किया जाता है

ln -s /dev/xvda /dev/root
/etc/init.d/quota restart

को /etc/rc.local। लेकिन Ubuntu 16.10 rc.localअब सिस्टमड का उपयोग नहीं करता है । इसके लिए विकल्प क्या है rc.local, मैं स्टार्टअप पर उपरोक्त कमांड कैसे चला सकता हूं?

इसके अलावा, मैंने सेवा का उपयोग करने में सक्षम किया systemctl enable rc-local.serviceलेकिन यह मेरे लिए काम नहीं करता था। किसी भी नेतृत्व की सराहना की जाएगी।


di आप इसे रूट के रूप में चलाते हैं, और क्या आपने अपना सिस्टम पुनः आरंभ किया है?
जॉर्ज उदेन

@ जी हाँ, मैंने दोनों किया
सौरभ शर्मा

कोशिश यह
जॉर्ज Udosen

@ जॉर्ज वह भी काम नहीं कर रहे हैं
सौरभ शर्मा

बस इस हैक को देखें, देखें कि क्या यह उड़ता है ...
जॉर्ज उडोसन

जवाबों:


65

पहचान

मुझे लगता है कि आपको जॉर्ज द्वारा लिंक में सुझाई गई नई सेवा नहीं बनानी चाहिए। rc-local.serviceपहले से ही systemd में मौजूद है और सेवा फ़ाइल पता चलता है कि rc.local, यदि वह मौजूद है और निष्पादन योग्य है, स्वचालित रूप से में खींच लिया जाता हैmulti-user.target । तो कुछ को फिर से बनाने या बल देने की आवश्यकता नहीं है जो कि बस दूसरे तरीके से किया जाता है systemd-rc-local-generator

एक हल

एक त्वरित वर्कअराउंड (मुझे नहीं पता कि अगर यह कैनोनिकल तरीका है):

एक टर्मिनल में करें:

printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
sudo reboot

उसके बाद rc.localवसीयत को सिस्टम स्टार्टअप पर बुलाया जाएगा। जो आप चाहते हैं उसे डालें।

पृष्ठभूमि

यदि आप एक टर्मिनल में करते हैं:

sudo systemctl edit --full rc-local

आप देख सकते हैं कि हेड कमेंट में लाइनें हैं जैसे:

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.

यह इंगित करता है, कि इस प्रणाली में, यदि कोई फाइल /etc/rc.localहै, जो निष्पादन योग्य है, तो यह स्वतः ही मल्टी-user.tgget में खींच ली जाएगी। तो आप बस तदनुसार फ़ाइल ( sudo touch...) बनाएँ और इसे निष्पादन योग्य ( sudo chmod +x ...) बनाएँ ।


4
का प्रयोग न करें #!/bin/bash, हालांकि, उपयोग #!/bin/shजब तक आप वास्तव में अपनी स्क्रिप्ट में पार्टी की जरूरत है। प्रदर्शन कारणों से अन्य सभी सिस्टम स्क्रिप्ट डैश का उपयोग करते हैं, न कि बैश।
spikyjt

"किसी चीज़ को फिर से बनाने या बल देने की ज़रूरत नहीं है जो कि किसी अन्य तरीके से सिस्टमड-आरसी-लोकल-जनरेटर द्वारा किया जाता है" rc-localकिसी अन्य इकाई के बाद इसे ऑर्डर करने की अनुमति नहीं देता है, क्या यह नहीं है?
x-यूरी

20

मैंने इस समाधान का सुझाव दिया जिसमें systemd यहाँ का उपयोग शामिल है :

  1. एक सेवा बनाएँ:

    sudo vi /etc/systemd/system/rc-local.service
    
  2. वहां अपना कोड जोड़ें:

    [Unit]
    Description=/etc/rc.local Compatibility
    ConditionPathExists=/etc/rc.local
    
    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    StandardOutput=tty
    RemainAfterExit=yes
    SysVStartPriority=99
    
    [Install]
    WantedBy=multi-user.target
    
  3. सुनिश्चित करें कि /etc/rc.localयह निष्पादन योग्य है और बनाएं और इसके अंदर यह कोड जोड़ें:

    sudo chmod +x /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.
    
    exit 0
    
  4. सेवा सक्षम करें:

    sudo systemctl enable rc-local
    
  5. सेवा प्रारंभ करें और स्थिति जांचें:

    sudo systemctl start rc-local.service
    sudo systemctl status rc-local.service
    
  6. सब कुछ ठीक है कि आप अपने में जोड़ सकते हैं हो जाता है codeकरने के लिए /etc/rc.localफ़ाइल फिर उसे पुनरारंभ।

नोट: लुबंटू 16.10 पर परीक्षण किया गया।

स्रोत:

https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd


मैंने सभी कदम उठाए। मेरे पास r.local है: touch "hello"से पहले exit 0। सेवा सक्रिय प्रतीत होती है, लेकिन यह ubuntu 16.04 Arabian 5.31
Danny182

जैसा कि @Jan के जवाब से पता चलता है, एक पूरी नई सेवा बनाना आवश्यक नहीं है क्योंकि सिस्टमड पहले से ही rc.local का समर्थन करता है।
टॉमीपीनट्स


2

जनवरी के उत्तर में जोड़ने के लिए , सामान्य rc.localफ़ाइल के विपरीत , rc-local serviceसभी सेवाओं को शुरू करने के बाद निष्पादित नहीं किया जाता है, लेकिन नेटवर्क ऑनलाइन होने के बाद।

कुछ मामलों में आप rc.localबाद में से कमांड चलाना चाह सकते हैं । उदाहरण के लिए, मैं चाहता था कि इसे lxdशुरू करने के बाद निष्पादित किया जाए ।

इस मामले में आप rc-local serviceड्रॉप-इन गोपनीय फ़ाइल बनाकर स्टार्टअप निर्भरता को संपादित कर सकते /etc/systemd/system/rc-local.service.d/override.conf हैं: सामग्री के साथ:

[Unit]
After=network.target lxd.service

जहाँ आप एक आवश्यक इकाई नाम जोड़ सकते हैं (जैसे मैंने जोड़ा lxd.service)

systemctl daemon-reloadउसके बाद भूल न जाना ।


उबंटू पूछने के लिए आपका स्वागत है! यदि आप कोई अन्य उत्तर सुधारना चाहते हैं तो कृपया उसे संपादित करने का सुझाव दें। यदि आप एक आंशिक विकल्प प्रस्तुत करना चाहते हैं, तो कृपया उन हिस्सों को दोहराएं या उद्धरण दें जो (मूल उत्तर परिवर्तन होने पर) समान हैं और मतभेदों को उजागर करते हैं। किसी भी मामले में एक नया अधूरा जवाब न बनाएं ! धन्यवाद।
डेविड फ़ॉस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.