बूट के दौरान स्क्रिप्ट को रूट के रूप में कैसे चलाएं


59

मेरे पास एक स्क्रिप्ट थी जो नेटवर्कर के उपयोग के बिना स्वचालित रूप से मेरी वाईफाई को सक्षम करती है, लेकिन मुझे नहीं पता कि सिस्टम को बूट करते समय स्क्रिप्ट को रूट के रूप में कैसे चलाना है। मैं बूट के दौरान स्क्रिप्ट को स्वचालित रूप से कैसे चलाऊं?


ऑटो-स्टार्ट प्रोग्राम autostartमैनिफ़ेस्ट में या *.serviceकई स्थानों पर init.dया साथ ही फ़ाइलों में कॉन्फ़िगर किए गए हैं crontab। इसे देखें: unix.stackexchange.com/a/525845/43233
Noam Manos

जवाबों:


54

उस स्क्रिप्ट को रखें जिसे आप /etc/init.d निर्देशिका में चलाना चाहते हैं और स्क्रिप्ट को निष्पादन योग्य बनाते हैं।

chmod 755 myscript

एक बार जब आप रन लेवल डायरेक्टरी में एक प्रतीकात्मक लिंक बना लेते हैं, जिसका आप उपयोग करना चाहते हैं, उदाहरण के लिए यदि आप ग्राफिकल रनलेवल 2 में एक प्रोग्राम चलाना चाहते हैं, तो उबंटू के लिए डिफॉल्ट रनवेल, आप इसे /etc/rc2.dडायरेक्टरी में रखेंगे । आप बस इसे निर्देशिका में नहीं रख सकते, आपको संकेत देना होगा कि यह स्टार्टअप को "S" के साथ इंगित करके कैसे चलेगा और निष्पादन आदेश महत्वपूर्ण है। यह सब कुछ है कि यह एक उच्च संख्या देकर निर्देशिका में है के बाद रखें।

यदि अंतिम स्क्रिप्ट को चलाया जाना है rc.localऔर इसका नाम है S99rc.localतो आपको अपनी स्क्रिप्ट को जोड़ने की आवश्यकता है S99myscript

ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript

प्रत्येक पिछड़े संगत /etc/rc*.dनिर्देशिका में निर्देशिका के प्रतीकात्मक लिंक होते हैं /etc/init.d/


1
ध्यान दें कि उबंटू सर्वर 14.04 के तहत, मैं का उपयोग करने के लिए आवश्यक /etc/rc2.d, बजाय rc3.dके रूप में उदाहरण में संकेत दिया। ऐसा लगता rc2.dहै कि केवल चित्रमय रन स्तर नहीं है।
ब्रैड

1
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.dआपको ले जाएगा कि कौन सी /etc/rc?.dनिर्देशिका आपके डिफ़ॉल्ट रनवे से मेल खाती है।
केविन

1
इसके बजाय: "यदि अंतिम स्क्रिप्ट को चलाया जाना है rc.localऔर इसे नाम दिया गया है S99rc.localतो आपको अपनी स्क्रिप्ट जोड़ने की आवश्यकता है S99myscript।" क्या आपका मतलब है: "यदि अंतिम स्क्रिप्ट को चलाया जाना है myscriptऔर इसका नाम है S99myscriptतो आपको अपनी स्क्रिप्ट जोड़ने की आवश्यकता है S99myscript।" ???
डोर

6
ध्यान रखें कि यह सिस्टमड के साथ काम नहीं करेगा (यानी, उबंटू 16.04 से शुरू)। इसके बजाय इसे देखें ।
अलेक्जेंडर रेवो

26

में कमांड शामिल करें /etc/rc.local। जब भी यूजर के रनवे में बदलाव होगा, इसे चलाया जाएगा।

नोट: आपको /etc/rc.local में अंतिम पंक्ति से पहले कमांड डालना होगा जिसमें शामिल हैं: "बाहर निकलें 0"।


3
नोट: आपको कमांड को अंतिम पंक्ति से पहले रखना होगा /etc/rc.localजिसमें शामिल हैं: exit 0
rubo77

3
/etc/rc.localubuntu 15.10 में टिप्पणी है कि "इस स्क्रिप्ट को प्रत्येक मल्टीसियर रनलेवल के अंत में निष्पादित किया जाता है।" तो स्क्रिप्ट को बूट के दौरान कई बार चलाया जा सकता है, है ना?
जर्नो

@ जमो, हां, प्रत्येक रनवे पर। मैं नहीं जानता कि यह "बूट पर" चलाने से संबंधित कैसे है, जिसका अर्थ है आमतौर पर "बूट में एक बार चलाना"।
erm3nda

17

crontabरिबूट के बाद अपनी स्क्रिप्ट को चलाने के लिए एक विकल्प का उपयोग करें ,

आप क्रॉन@reboot में कोड जोड़कर कर सकते हैं

जड़ उपयोगकर्ता द्वारा क्रॉन्स्ट खोलें:

$ sudo crontab -e

तल पर अगला रिकॉर्ड जोड़ें:

@reboot yourScriptPath 

वही करेगा जो आप चाहते हैं।


क्या आपके पास कमांड का उपयोग करने का मतलब है crontab -e, जिसे सुपरसुसर विशेषाधिकारों की आवश्यकता नहीं है? मुझे आश्चर्य है, अगर यह स्क्रिप्ट चला सकता है जिसे रूट के रूप में चलाने की आवश्यकता है।
जर्नो

मैंने यह परीक्षण किया। यह स्क्रिप्ट को रूट के रूप में नहीं चलाता है।
जारो

4
sudo crontab -eस्टार्टअप के दौरान स्क्रिप्ट को रूट के रूप में चलाने के लिए आपको कमांड चलाते हुए लाइन को जोड़ना होगा ।
जारो

हटाने के लिए मत भूलना /var/run/crond.reboot, यदि नहीं, तो कार्य निष्पादित नहीं करेगा
अल्बर्ट कैटला

केवल रिकॉर्ड के लिए, मुझे यकीन है कि @jarno इसे पहले से ही जानता होगा। प्रत्येक उपयोगकर्ता का अपना क्रोन कार्य होता है, इसलिए यदि आप इसे अपने उपयोगकर्ता के एक में जोड़ते हैं (बिना कॉन्टो के crontab चल रहा है) तो स्क्रिप्ट आपके उपयोगकर्ता द्वारा चलाई जाएगी। इसलिए आपको इसे रूट के रूप में चलाने की आवश्यकता है ताकि यह बूट पर रूट के रूप में स्क्रिप्ट चलाने में सक्षम हो।
एडीफेरेट्रो

9

इसने मेरे लिए Ubuntu 17.04 पर काम किया:

  1. disable_cdromआपके लिए सुविधाजनक की तरह टूर स्क्रिप्ट फ़ाइल बनाएँ । मेरे मामले में home/yterle/disable_cdrom। मेरे मामले में:

    #!/bin/sh
    eject /dev/sr0 -i 1
    
  2. इसे अमल में लाएं chmod 775 disable_cdrom

  3. नेविगेट करें /etc/systemd/systemऔर वहां एक serviceफ़ाइल बनाएं । उदाहरण के लिएsudo gedit /etc/systemd/system/disable_cdrom.service

मेरा disable_cdrom.serviceऐसा दिखता है:

[Unit]
Description=Disable cdrom

[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom

[Install]
WantedBy=multi-user.target

जहां ExecStartआपकी स्क्रिप्ट को चलाने के लिए अंक हैं/bin/sh

तब systemctl enable disable_cdrom.servicesystemd सेवा को सक्षम करने के लिए चलाएँ


1
यह देखते हुए कि यह वही है जो मैं देख रहा था, लेकिन मुझे लगता है कि आपका मतलब हैsystemctl enable disable_cdrom.service
केनेटरनर

5

/etc/init.d/ निष्पादन योग्य अनुमति के साथ अपनी स्क्रिप्ट फ़ाइल शामिल करें फिर अलग-अलग रन स्तर सेट करें

$ update-rc.d script-name default

यह आपकी स्क्रिप्ट को बूट स्टार्टअप पर डाल देगा।


काली लिनक्स v2.0 पर मेरे लिए काम नहीं करता है। क्या आपका मतलब था update-rc.d script-name enable?
शोपाजो डे एरियेरेज़

update-rc.d <script-name> default खोल स्क्रिप्ट जो आपके पास /etc/init.d/ <script-name> पर कॉपी है
MS Parmar

4

इस तरह एक पाठ फ़ाइल बनाएँ /etc/cron.d/:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

@reboot   root    yourScriptPath

(आप yourScriptPathजिस स्क्रिप्ट को चलाना चाहते हैं, उसके लिए आपको रास्ता बदलना चाहिए ।)


1

स्क्रिप्ट को जोड़ने में सावधानी बरतने के कारण rc.local- मैं इसके कारण स्प्लैश स्क्रीन में फंस गया था। दबाने Alt+ से F1पता चलता है कि स्प्लैश स्क्रीन के पीछे क्या चल रहा था (स्क्रिप्ट rc.localचल रही थी)।

मैं इससे बाहर नहीं निकल सका।

  • Ctrl+ Alt+ Delया
  • Alt+ PrtSc+ Kया
  • Ctrl+ Alt+F#

कुछ भी काम नहीं करता है।

मुझे एक USB उबंटू छवि से बूट करना था, ढूंढना rc.local, अपने आप को फ़ाइल और इसे हटाने की अनुमति देना। मुझे लगता है कि आपको सामान नहीं करना चाहिए यदि आप नहीं जानते कि आप क्या कर रहे हैं।

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