मैं स्क्रिप्ट कैसे चला सकता हूं स्वचालित रूप से जब उबंटू शुरू होता है तो मुझे स्टार्टअप के बाद उन्हें मैन्युअल रूप से नहीं चलाना पड़ता है?
एक दृष्टिकोण @रिबूट जोड़ना है क्रॉन कार्य:
- चल रहा है
crontab -e
आपको अपना क्रॉन संपादित करने की अनुमति देगा । -
इस तरह एक लाइन जोड़ना:
@reboot /path/to/script
एक बार आपका कंप्यूटर बूट होने के बाद उस स्क्रिप्ट को निष्पादित करेगा ।
आपको किस प्रकार की स्क्रिप्ट चलाने की आवश्यकता है, इसके आधार पर । . सेवाओं के लिए और जैसे आपको उपयोग करना चाहिए अपस्टार्ट. लेकिन एक उपयोगकर्ता स्क्रिप्ट के लिए इन्हें गनोम द्वारा सत्र स्क्रिप्ट के रूप में लॉन्च किया जाना चाहिए! एक नज़र है के तहत प्रणाली > वरीयताओं > स्टार्टअप अनुप्रयोगों ।
एक तरफ ध्यान दें यदि आपको टर्मिनल लॉगिन पर चलाने के लिए कुछ स्क्रिप्ट की आवश्यकता है तो आप उन्हें जोड़ सकते हैं .बैश_लॉगिन अपने होम डायरेक्टरी में फाइल करें ।
14.04 और पुराने के लिए
एक साधारण कमांड (जिसे चलने की आवश्यकता नहीं है) एक अपस्टार्ट नौकरी का उपयोग कर सकता है जैसे:
start on startuptaskexec /path/to/command
इसे एक में सहेजें .conf
फ़ाइल में /etc/init
(यदि आपको सिस्टम बूट होने पर रूट के रूप में चलाने की आवश्यकता है), या में ~/.config/upstart
(यदि आपको इसकी आवश्यकता हैजब आप लॉग इन करते हैं तो अपने उपयोगकर्ता के रूप में चलाने के लिए) ।
आप इसमें कमांड जोड़ सकते हैं /etc/rc.local
:
sudo nano /etc/rc.local
यह कमांड को रूट के रूप में निष्पादित करता है ।
एक विशिष्ट उपयोगकर्ता के रूप में कमांड निष्पादित करने के लिए, उपयोग करें sudo -i -u
(-i
लॉगिन शेल भी चलाने के लिए) । उदाहरण के लिए, एक सतत एसएसएच सुरंग स्थापित करना, जहां myhost
है definde में johndoe
s ~/.ssh/config
फ़ाइल:
sudo -i -u johndoe autossh -nNT -L 1234:localhost:1234 myhost
ध्यान दें कि यदि /etc/rc.local
मौजूद नहीं था (जैसा कि 16.04 से उबंटू पर मामला है), आपको एक जोड़ना होगा शेबंग लाइन शीर्ष पर (जैसे #!/bin/bash
), और सुनिश्चित करें कि फ़ाइल निष्पादन योग्य है:
sudo chmod a+x /etc/rc.local
15.04 और बाद के लिए:
एक (अल्पकालिक)चलाने के लिए1 स्टार्टअप पर कमांड का उपयोग कर systemd
, आप प्रकार की एक सिस्टमड इकाई का उपयोग कर सकते हैं OneShot
. उदाहरण के लिए, बनाएं /etc/systemd/system/foo.service
युक्त:
[Unit]Description=Job that runs your user script[Service]ExecStart=/some/commandType=oneshotRemainAfterExit=yes[Install]WantedBy=multi-user.target
फिर भागो:
sudo systemctl daemon-reloadsudo systemctl enable foo.service
अनिवार्य रूप से, यह सिर्फ परिवर्तित हो रहा है एक विशिष्ट अपस्टार्ट नौकरी करने के लिए एक systemd एक (देखें अपस्टार्ट उपयोगकर्ताओं के लिए सिस्टमड).
आप एकाधिक का उपयोग करके एक ही सेवा फ़ाइल से कई कमांड चला सकते हैं ExecStart
लाइनें:
[Service]ExecStart=/some/commandExecStart=/another/command some argsExecStart=-/a/third/command ignore failure
आदेश हमेशा पूर्ण पथ के साथ दिया जाना चाहिए । यदि कोई आदेश विफल रहता है, तो बाकी नहीं चलाए जाते हैं । A -
पथ से पहले सिस्टमड को गैर-शून्य निकास स्थिति को अनदेखा करने के लिए कहता है (इसे विफलता पर विचार करने के बजाय) ।
प्रासंगिक:
उपयोगकर्ता सत्रों के लिए, आप सिस्टमड इकाई बना सकते हैं ~/.config/systemd
बजाय. यह 16.04 के साथ काम करना चाहिए, लेकिन सिस्टमड के साथ उबंटू के पहले रिलीज नहीं (क्योंकि वे अभी भी उपयोगकर्ता सत्रों के लिए अपस्टार्ट का उपयोग करते थे) । उपयोगकर्ता सत्र इकाइयों को सिस्टम सेवाओं के समान कमांड के साथ नियंत्रित किया जा सकता है, लेकिन इसके साथ --user
विकल्प जोड़ा गया:
systemctl --user daemon-reloadsystemctl --user status foo.service
शैल सिंटैक्स
ध्यान दें कि, अपस्टार्ट के विपरीत, सिस्टमड नहीं चलता है Exec*
एक खोल के माध्यम से आदेश । यह कुछ सीमित चर विस्तार और एकाधिक कमांड (द्वारा अलग) करता है ;
) स्वयं, लेकिन यह इसके बारे में है जहां तक शेल-जैसे सिंटैक्स जाता है । कुछ भी अधिक जटिल के लिए, पुनर्निर्देशन या पाइप कहें, अपने आदेश को लपेटें sh -c '...'
या bash -c '...'
.
1लंबे समय तक रहने वाले डेमॉन के विपरीत ।
स्वचालित रूप से कमांड चलाने के विभिन्न तरीके हैं:
-
द अपस्टार्ट सिस्टम उन सभी लिपियों को निष्पादित करेगा जिनसे यह निर्देशिका में कॉन्फ़िगरेशन पाता है
/etc/init
. ये स्क्रिप्ट सिस्टम स्टार्टअप के दौरान चलेंगी (या कुछ घटनाओं के जवाब में, जैसे, एक शटडाउन अनुरोध) और इसलिए कमांड चलाने का स्थान है जो उपयोगकर्ता के साथ बातचीत नहीं करते हैं; सभी सर्वर इस तंत्र का उपयोग करना शुरू कर रहे हैं ।आप एटी के लिए एक पठनीय परिचय पा सकते हैं: http://upstart.ubuntu.com/getting-started.html द मैन पेज
man 5 init
औरman 8 init
आपको पूरी जानकारी दें। -
नाम की एक शेल स्क्रिप्ट
.gnomerc
आपके होम डायरेक्टरी में हर बार जब आप गनोम सेशन में लॉग इन करते हैं तो स्वचालित रूप से सोर्स किया जाता है । आप वहां मनमानी आदेश डाल सकते हैं; इस स्क्रिप्ट में आपके द्वारा सेट किए गए पर्यावरण चर आपके सत्र में चलने वाले किसी भी प्रोग्राम द्वारा देखे जाएंगे ।ध्यान दें कि सत्र तब तक शुरू नहीं होता है
.gnomerc
स्क्रिप्ट समाप्त हो गई है; इसलिए, यदि आप कुछ लंबे समय से चल रहे प्रोग्राम को ऑटोस्टार्ट करना चाहते हैं, तो आपको संलग्न करना होगा&
प्रोग्राम इनवोकेशन के लिए, इसे रनिंग शेल से अलग करने के लिए । मेनू विकल्प प्रणाली -> प्राथमिकताएं -> स्टार्टअप अनुप्रयोगों आपको यह परिभाषित करने की अनुमति देता है कि आपका ग्राफिकल सत्र शुरू होने पर कौन से एप्लिकेशन शुरू किए जाने चाहिए (उबंटू काफी कुछ पूर्वनिर्धारित करता है), और उन्हें अपने स्वाद में जोड़ें या निकालें । इसका लगभग एक ही उद्देश्य और दायरा है
.gnomerc
स्क्रिप्ट, सिवाय आपको जानने की जरूरत नहीं हैsh
सिंटैक्स (लेकिन न तो आप किसी का उपयोग कर सकते हैंsh
प्रोग्रामिंग निर्माण) ।
$HOME/.config/autostart
स्टार्टअप एप्लिकेशन सूची शामिल है । .desktop
इस फ़ोल्डर में फ़ाइलें स्टार्टअप पर निष्पादित की जाएंगी । इसे निष्पादन योग्य अनुमति की आवश्यकता हो सकती है (chmod +x startup.desktop
).
के लिए नमूना उदाहरण .desktop
फ़ाइल:
[Desktop Entry]Type=ApplicationExec="</path/to/script>"Hidden=falseNoDisplay=falseX-GNOME-Autostart-enabled=trueName=Startup Script
यहाँ "</path/to/script>"
आपके लिए पथ के साथ बदल दिया गया है script.sh
यदि आप अपनी स्क्रिप्ट रखते हैं myscript
में /usr/local/bin
ताकि इसे सीधे कमांड द्वारा निष्पादित किया जा सके, आप लिख सकते हैं myscript
के बजाय "</path/to/script>"
.
का नमूना उदाहरण myscript.sh
:
#!/bin/bash<commands to be executed>exit
परिणाम:.desktop
फाइल से शुरू किया जाएगा $HOME/.config/autostart
जो स्क्रिप्ट को निष्पादित करता है Exec=
साधारण चीजों के लिए आप एक कमांड जोड़ सकते हैं >>सिस्टम-प्राथमिकताएं-सत्र अपनी स्क्रिप्ट के स्थान की ओर इशारा करते हुए ।
वैकल्पिक रूप से आप इसे /आदि/इनिट में जोड़ सकते हैं । d/rc.स्थानीय या एक अपस्टार्ट नौकरी अगर यह एक और अधिक है निम्न स्तर सामान।
पर एक नज़र रखना https://help.ubuntu.com/community/UbuntuBootupHowto अधिक जानकारी के लिए
cron
उत्तर शीर्ष मतदान से अलग लागू किया गया
यह उत्तर अभी भी उपयोग करता है cron
लेकिन शीर्ष मतदान उत्तर की तुलना में एक अलग विधि का उपयोग करता है । यह उबंटू 16.04 के बाद से काम करता है लेकिन शायद बहुत जल्द समर्थित है । यह सिर्फ इतना है कि मैंने उपयोग करना शुरू कर दिया cron
16.04 के बाद से कंप्यूटर बूट होने पर नौकरी चलाने के लिए ।
कब करता है cron
भागो?
टिप्पणियों में किसी ने पूछा;वे कब दौड़ते हैं?". आप बता सकते हैं में syslog / journalctl:
$ journalctl -b | grep cronJan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[985]: (root) CMD ( /usr/local/bin/cron-reboot-cycle-grub-background)Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user rootJan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user rootJan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root
ध्यान देने वाली एक बात है cron
आप नौकरी चलाने की स्थिति ईमेल कर सकते हैं और @reboot
नौकरियां इतनी जल्दी नेटवर्क प्रबंधक चलाने के लिए और ईमेल जब तक आप एक डाल नहीं चल रहा होगा sleep
अपनी स्क्रिप्ट में कमांड करें ।
अपनी स्क्रिप्ट कहां रखें
निर्देशिका में अपनी स्क्रिप्ट रखो /etc/cron.d
:
$ ll /etc/cron.dtotal 44drwxr-xr-x 2 root root 4096 Nov 26 19:53 ./drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../-rw-r--r-- 1 root root 244 Dec 28 2014 anacron-rw-r--r-- 1 root root 148 Feb 18 2017 cycle-grub-background-rw-r--r-- 1 root root 138 Mar 5 2017 display-auto-brightness-rw-r--r-- 1 root root 460 Nov 26 19:53 nvidia-hdmi-sound-rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder-rw-r--r-- 1 root root 224 Nov 19 2016 touch-vmlinuz-rw-r--r-- 1 root root 700 Aug 5 11:15 turn-off-hyper-threading
एक स्क्रिप्ट कैसी दिखती है?
यहां कुछ स्क्रिप्ट हैं जिन्हें मैंने प्रत्येक बूट को चलाने के लिए सेटअप किया है:
$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin @reboot root /usr/local/bin/cron-reboot-cycle-grub-background$ cat /etc/cron.d/touch-vmlinuzSHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin@reboot root touch "/boot/vmlinuz-"`uname -r`
आपको उपयोग करना चाहिए अपस्टार्ट इसके लिए । अपस्टार्ट का उपयोग उबंटू प्रक्रियाओं के लिए किया जाता है जो स्वचालित रूप से शुरू होती हैं । यह पुराने सिस्टम-वी इनिट की तरह एक बढ़ाया समाधान है । d लिपियों. यह आपको अपनी स्क्रिप्ट की शुरुआत में पूर्वापेक्षाएँ डालने की भी अनुमति देता है (यानी क्या आपको नेटवर्क चलाने की आवश्यकता है? आदि । )
यदि आप कर्नेल शुरू होने के ठीक बाद सिस्टमड से पहले अपनी स्क्रिप्ट चलाना चाहते हैं, तो जिस तरह से जोड़ रहा है init=/path/to/script
कर्नेल कमांड लाइन में /boot/grub/grub.cfg
या अधिक भविष्य के सबूत में अपनी खुद की मेनू प्रविष्टि करें /etc/grub.d/40_custom
से एक मेनू प्रविष्टि की प्रतिलिपि बनाकर /boot/grub/grub.cfg
और आवश्यक परिवर्तन करना (और चल रहा है update-grub
उसके बाद के लिए grub
अपनी कस्टम फ़ाइल को इसमें जोड़ने के लिए /boot/grub/grub.cfg
).
linux /boot/vmlinuz-5.4.0-26-generic ... ro quiet splash
में बदलें
linux /boot/vmlinuz-5.4.0-26-generic ... ro quiet splash init=/path/to/script
ठीक से रखने के लिए ध्यान रखें उदा । #!/bin/bash
पहली पंक्ति पर और exec /sbin/init
(यदि /sbin/init
आपके सिस्टम पर मौजूद है - मेरा यह सिस्टमड को इंगित करता है) कर्नेल आतंक से बचने के लिए अंत में ।
अगर कोई यह भी दिखा सकता है कि कब और कहाँ दोनों भयानक होंगे । मैं ऐसा इसलिए कहता हूं क्योंकि मुझे पता है कि स्क्रिप्ट शुरू करने के कम से कम 2 तरीके हैं जो अन्य अनुप्रयोगों के शुरू होने से पहले आग लग जाएंगे (जैसे एक्स 11)
- 1 से @गेब्रियलफेयर। समस्या का एक बड़ा हिस्सा यह है कि मूल प्रश्न और उत्तर दस साल पुराने हैं । मैं यह भी जोड़ूंगा कि इस समस्या को हल करने के कई तरीके हैं । यूनिक्स दर्शन की सादगी का क्या हुआ?! किसी को * जानकार * का अनुरोध करें और पर्याप्त बिंदुओं के साथ इस पोस्ट को फिर से लिखें, या आधुनिक ओएस संस्करणों के लिए एक नया, अद्यतित, निश्चित उत्तर जोड़ें ।
यह पूरा उत्तर धागा एक गड़बड़ है । स्टैक एक्सचेंज प्रारूप इस प्रश्न के लिए सबसे उपयुक्त नहीं लगता है