सवाल स्टार्ट अप पर स्क्रिप्ट कैसे चलाएं?


मैं स्क्रिप्ट कैसे चला सकता हूं खुद ब खुद जब उबंटू शुरू होता है तो मुझे स्टार्टअप के बाद मैन्युअल रूप से चलाने की ज़रूरत नहीं है?


456
2017-08-04 19:54


मूल


अगर कोई भी कब और कहां दिखा सकता है तो वह शानदार होगा। मैं यह इसलिए कहता हूं क्योंकि मुझे पता है कि एक स्क्रिप्ट शुरू करने के कम से कम 2 तरीके हैं जो अन्य अनुप्रयोगों को शुरू करने से पहले आग लगेंगे (जैसे एक्स 11) - Buttink
यह पूरा उत्तर धागा एक गड़बड़ है। स्टैक एक्सचेंज प्रारूप इस प्रश्न के लिए सबसे उपयुक्त नहीं प्रतीत होता है - Gabriel Fair
यह वास्तव में काफी मनोरंजक है। कितने अलग तरीके हो सकते हैं? - devios1


जवाब:


आपको किस प्रकार की स्क्रिप्ट चलाने की आवश्यकता है इस पर निर्भर करता है .. सेवाओं के लिए और जैसा कि आपको उपयोग करना चाहिए कल का नवाब। लेकिन उपयोगकर्ता स्क्रिप्ट के लिए इन्हें ग्नोम द्वारा सत्र स्क्रिप्ट के रूप में लॉन्च किया जाना चाहिए! सिस्टम> वरीयताओं> स्टार्टअप अनुप्रयोगों के तहत एक नज़र डालें।

एक साइड नोट पर यदि आपको टर्मिनल लॉगिन पर चलाने के लिए कुछ स्क्रिप्ट की आवश्यकता है तो आप उन्हें जोड़ सकते हैं .bash_login अपनी होम निर्देशिका में फ़ाइल करें।

14.04 और पुराने के लिए

एक साधारण कमांड (जिसे चलाने के लिए जरूरी नहीं है) एक अपस्टार्ट नौकरी का उपयोग कर सकता है जैसे:

start on startup
task
exec /path/to/command

इसे एक में सहेजें .conf में फाइल /etc/init (यदि सिस्टम बूट होने पर आपको रूट के रूप में चलाने की आवश्यकता है), या अंदर ~/.config/upstart (यदि तुम्हें इसकी आवश्यकता है लॉग इन करते समय अपने उपयोगकर्ता के रूप में चलाने के लिए)।


191
2017-08-04 23:26



यह देखते हुए कि एसओ और स्टैक एक्सचेंज कैसे चलता है, क्या आप अपस्टार्ट स्क्रिप्ट का उदाहरण दे सकते हैं और इसे कहां रखा जाएगा? इससे यह एक बेहतर जवाब मिलेगा। आपका लिंक कहता है कि इसे बनाए रखा नहीं जा रहा है और अपस्टार्ट कुकबुक को देखने के लिए, जो हुज्यूज है। मेरे पास एक विचार नहीं है कि कहां से शुरू करना है। - Ehtesh Choudhury
अगर मुझे कमांड को रूट के रूप में चलाने की ज़रूरत है तो क्या होगा? - dopatraman
@dopatraman उत्तर बताता है कि इसके साथ सभी प्रक्रियाओं को रूट के रूप में चलाया जाता है। - cybermonkey
अपस्टार्ट (उबंटू 15.04+) के बजाय सिस्टम चलाने वाले सिस्टम पर क्या करना है, यह बताने के लिए कृपया इस उत्तर को अपडेट करें।
यह जवाब मुझे समझ में नहीं आता है। में सूचीबद्ध अनुप्रयोगों system->pref->startup applications न तो अंदर पाया जा सकता है /etc/init/ न ही अंदर ~/.config/upstart। इसलिए स्टार्टअप अनुप्रयोग कहां परिभाषित हैं? - Blauhirn


एक दृष्टिकोण @reboot जोड़ने के लिए है क्रॉन कार्य:

  1. चल रहा है crontab -e आपको अपने क्रॉन को संपादित करने की अनुमति देगा।
  2. इस तरह की एक लाइन जोड़ना:

    @reboot /path/to/script
    

    एक बार आपका कंप्यूटर बूट होने के बाद उस स्क्रिप्ट को निष्पादित करेगा।


476
2017-08-04 19:57



@reboot कीवर्ड एक अच्छी टिप है क्योंकि यह व्यापक रूप से ज्ञात नहीं है। - jathanism
अच्छा लगा। कोई उपाय बिल्कुल कब यह ट्रिगर्स? - Oli♦
तो ... अगर मैं सत्ता खो देता हूं और बिजली बहाल होने पर पीसी फिर से चालू हो जाती है तो यह नहीं चलेगा? - Mike Wills
@siamii: man 5 crontab कहता है कि @reboot स्टार्टअप पर निष्पादित किया जाता है (जब क्रॉन डिमन शुरू होता है)। - jfs
यह कमाल का है। अब तक यह बेहतर लगता है rc.local चूंकि सिस्टम इस बिंदु (पैथ, आदि) द्वारा अधिक सेटअप लगता है। यह अजीब बात है कि कुछ कॉल करना इतना मुश्किल है बाद सिस्टम स्टार्टअप .. - Karthik T


कमांड जोड़ने के बारे में कैसे /etc/rc.local? इस फ़ाइल को संपादित करने के लिए आपको सूडो एक्सेस का उपयोग करना होगा।

sudo nano /etc/rc.local

135
2017-08-05 16:40



यह सबसे सीधे सवाल का जवाब देता है: जब आपका सिस्टम बूट होता है तो कुछ स्क्रिप्ट कैसे निष्पादित करें। अपस्टार्ट एक और जटिल कार्य करता है: डेमॉन प्रक्रिया शुरू करता है। - Dogweather
तो अपस्टार्ट डिमन प्रक्रिया शुरू करता है जबकि /etc/rc.local बैश स्क्रिप्ट शुरू करता है? - Donato
यह स्वीकार्य उत्तर होना चाहिए ... - Android Dev
इसे होना चाहिए? यह अब इन दिनों काम नहीं करता है, है ना? - DaVince
उबंटू 17.04 systemd के साथ काम किया - qodeninja


आदेशों को स्वचालित रूप से चलाने के विभिन्न तरीके हैं:

  1. कल का नवाब सिस्टम उन सभी स्क्रिप्ट को निष्पादित करेगा जिनसे इसे निर्देशिका में कॉन्फ़िगरेशन मिलती है /etc/init। ये स्क्रिप्ट सिस्टम स्टार्टअप के दौरान चलती हैं (या कुछ घटनाओं के जवाब में, उदाहरण के लिए, शटडाउन अनुरोध) और ऐसे ही आदेश चलाने के लिए स्थान हैं जो उपयोगकर्ता के साथ बातचीत नहीं करते हैं; सभी तंत्र इस तंत्र का उपयोग शुरू कर रहे हैं।

    आप यहां एक पठनीय परिचय पा सकते हैं: http://upstart.ubuntu.com/getting-started.html आदमी पेज man 5 init तथा man 8 init आपको पूरा विवरण दें।

  2. नाम की एक शेल स्क्रिप्ट .gnomerc जब भी आप गनोम सत्र में लॉग इन करते हैं तो आपकी होम निर्देशिका में स्वचालित रूप से सोर्स किया जाता है। आप वहां मनमाना आदेश डाल सकते हैं; आपके द्वारा इस सत्र में सेट किए गए पर्यावरण चर को आपके सत्र में चलाने वाले किसी भी प्रोग्राम द्वारा देखा जाएगा।

    ध्यान दें कि सत्र तब तक शुरू नहीं होता है जब तक कि सत्र शुरू नहीं होता है .gnomerc लिपि समाप्त हो गई है; इसलिए, यदि आप कुछ लंबे समय से चलने वाले प्रोग्राम को ऑटोस्टार्ट करना चाहते हैं, तो आपको संलग्न करने की आवश्यकता है & कार्यक्रम के आमंत्रण के लिए, इसे चलने वाले खोल से अलग करने के लिए।

  3. मेनू विकल्प सिस्टम -> प्राथमिकताएं -> स्टार्टअप एप्लीकेशन आपको यह निर्धारित करने की अनुमति देता है कि आपका ग्राफ़िकल सत्र कब शुरू होता है (उबंटू काफी कुछ पूर्वनिर्धारित करता है), और उन्हें अपने स्वाद में जोड़ें या हटा दें। इसका लगभग एक ही उद्देश्य और दायरा है .gnomerc स्क्रिप्ट, सिवाय इसके कि आपको जानने की जरूरत नहीं है sh वाक्यविन्यास (लेकिन न ही आप किसी का उपयोग कर सकते हैं sh प्रोग्रामिंग निर्माण)।


68
2017-08-05 14:02



3) "इसके अलावा, यह लगभग एक ही उद्देश्य और .gnomerc स्क्रिप्ट का दायरा है", सिवाय इसके कि .gnomerc स्पष्ट रूप से चलता है से पहले एकता लोड हो रहा है, और Startup Applications स्पष्ट रूप से चलता है बाद एकता लोड हो रहा है। मुझे एक कार्यक्रम चलाया गया जो यूनिटी के मेनू बार पर बैठता है और इस मामले में इससे बड़ा अंतर आया! - That Brazilian Guy
@ ruda.almeida इसे इंगित करने के लिए धन्यवाद। जवाब पूर्व एकता दिनों में लिखा गया था। - Riccardo Murri
sudo update-rc.d myscript.sh defaults, जहां /etc/init.d/myscript.sh आपकी स्क्रिप्ट है, इसे स्टार्टअप पर भी चलाती है। - Dan Dascalescu


15.04 और बाद में:

एक (अल्पकालिक) चलाने के लिए1 systemd का उपयोग कर स्टार्टअप पर कमांड, आप प्रकार की systemd इकाई का उपयोग कर सकते हैं OneShot। उदाहरण के लिए, बनाएँ /etc/systemd/system/foo.service युक्त

[Unit]
Description=Job that runs your user script

[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

तो भागो:

sudo systemctl daemon-reload
sudo systemctl enable foo.service

अनिवार्य रूप से, यह सिर्फ परिवर्तित हो रहा है एक ठेठ अपस्टार्ट नौकरी एक प्रणाली के लिए (देखें अपस्टार्ट उपयोगकर्ताओं के लिए Systemd)।

आप एकाधिक सेवाओं का उपयोग करके एक ही सेवा फ़ाइल से कई कमांड चला सकते हैं ExecStart लाइनों:

[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure

आदेश हमेशा पूर्ण पथ के साथ दिया जाना चाहिए। यदि कोई आदेश विफल रहता है, तो बाकी नहीं चलते हैं। ए - पथ से पहले गैर-शून्य निकास स्थिति को अनदेखा करने के लिए सिस्टम को बताया जाता है (इसे विफलता पर विचार करने के बजाय)।

प्रासंगिक:


उपयोगकर्ता सत्रों के लिए, आप systemd इकाई बना सकते हैं ~/.config/systemd बजाय। यह 16.04 के बाद काम करना चाहिए, लेकिन पहले Ubuntu के सिस्टम सिस्टम के साथ रिलीज़ नहीं होना चाहिए (क्योंकि वे अभी भी उपयोगकर्ता सत्रों के लिए अपस्टार्ट का उपयोग करते हैं)। उपयोगकर्ता सत्र इकाइयों को सिस्टम सेवाओं के साथ समान आदेशों के साथ नियंत्रित किया जा सकता है, लेकिन साथ ही --user विकल्प जोड़ा गया:

systemctl --user daemon-reload
systemctl --user status foo.service

1लंबे समय तक रहने वाले डेमॉन के विरोध में।


53
2018-01-09 19:21



क्या नौकरी पर प्राथमिकता निर्धारित करना संभव है? या निर्दिष्ट करें कि यह पहले शुरू करने के लिए किसी अन्य सेवा पर निर्भर करता है? - r3wt
@ r3wt हां, ऐसा करने के विभिन्न तरीके हैं। WantedBy उदाहरण के लिए, यहां इस्तेमाल किया जाता है, जब यह शुरू होता है multi-user.target पहुंच गया। आप उपयोग कर सकते हैं Before, After, Requires, आदि देखें man systemd.unit - muru
@PerlDuck एकमात्र चीज नहीं है जिसकी कमी थी। धन्यवाद! - muru
आपका स्वागत है। - बीटीडब्ल्यू, द RemainAfterExit आपके द्वारा शुरू की जाने वाली सेवा और उसके वांछित व्यवहार पर निर्भर करता है। उदाहरण के लिए, /bin/df -h <s> होगा </ s> होना चाहिए RemainAfterExit=no। - PerlDuck
@PerlDuck में निहित कुछ भी नहीं है df जरूरत है RemainAfterExit=no। जब तक आप प्रत्येक बार चलाने पर कमांड को बार-बार निष्पादित नहीं करना चाहते हैं systemctl start foo। - muru


$HOME/.config/autostart
  • इस स्थान में स्टार्टअप एप्लिकेशन सूची है।
  • .desktop फ़ाइल यहां रखी जा सकती है जिसे स्टार्टअप पर निष्पादित किया जाएगा।

के लिए नमूना उदाहरण .desktop फ़ाइल:

निम्नलिखित डाल रहा है .desktop में फाइल $HOME/.config/autostart और दिया chmod +x:

[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script

यहाँ "</path/to/script>" आपके रास्ते के साथ बदल दिया गया है script.sh
(आमतौर पर अनुशंसित /usr/local/bin ताकि सीधे आदेश कमांड द्वारा निष्पादित किया जा सके myscript के साथ बदल दिया "</path/to/script>")।

का नमूना उदाहरण script.sh:

#!/bin/bash
<commands to be executed>
exit

परिणाम: .desktop फ़ाइल से लॉन्च किया जाएगा $HOME/.config/autostart जो स्क्रिप्ट निष्पादित करता है Exec=

इसलिए, आप स्टार्टअप पर अपनी वांछित खोल स्क्रिप्ट चला सकते हैं!


22
2017-07-20 06:14





सरल चीजों के लिए आप एक कमांड जोड़ सकते हैं प्रणाली> वरीयताएँ-> सत्र आपकी लिपि के स्थान पर इशारा करते हुए।

वैकल्पिक रूप से आप इसे /etc/init.d/rc.local में जोड़ सकते हैं या एक बना सकते हैं कल का नवाब नौकरी अगर यह और अधिक है निम्न स्तर सामान।

पर एक नज़र डालें https://help.ubuntu.com/community/UbuntuBootupHowto अधिक जानकारी के लिए


18
2017-08-04 19:59





आपको उपयोग करना चाहिए कल का नवाब इसके लिए। अपस्टार्ट का उपयोग उबंटू प्रक्रियाओं के लिए किया जाता है जो स्वचालित रूप से प्रारंभ हो जाते हैं। यह पुराने सिस्टम-वी init.d स्क्रिप्ट्स जैसे एक उन्नत समाधान है। यह आपको अपनी स्क्रिप्ट की शुरुआत में पूर्वापेक्षाएँ भी करने की अनुमति देता है (यानी क्या आपको नेटवर्क चलाने की आवश्यकता है? आदि)


5
2017-08-04 19:58





cron उत्तर शीर्ष वोट से अलग लागू किया

यह उत्तर अभी भी उपयोग करता है cron लेकिन शीर्ष मतदान वाले उत्तर की तुलना में एक अलग विधि का उपयोग करता है। यह उबंटू 16.04 के बाद से काम करता है लेकिन शायद अधिक जल्द ही समर्थित है। यह सिर्फ इतना है कि मैंने उपयोग करना शुरू कर दिया cron 16.04 के बाद कंप्यूटर बूट होने पर नौकरियां चलाने के लिए।

कब करता है cron चलते हैं?

टिप्पणियों में किसी ने पूछा "वे कब दौड़ते हैं?"। आप syslog / journalctl में बता सकते हैं:

$ journalctl -b | grep cron
Jan 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-02
Jan 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 root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 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.d
total 44
drwxr-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/sh
PATH=/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-vmlinuz
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    touch "/boot/vmlinuz-"`uname -r`

3
2018-01-03 01:02



Cronjobs जोड़ने के कई अलग-अलग तरीके हैं, लेकिन अत्यधिक मतदान किए गए उत्तर का मूल और आपका उत्तर अभी भी है @reboot। - muru
Crontabs जोड़ने के लिए वैकल्पिक तरीकों को पोस्ट किया जाना चाहिए askubuntu.com/q/2368/158442, जो स्पष्ट रूप से क्रॉन नौकरियों को जोड़ने के बारे में है। - muru
क्षमा करें मैं असहमत हूं। प्रश्न में उत्तर का मूल उपयोग करता है crontab -e जो कुछ विम-जैसी इंटरफेस के कारण काले कलाओं में से एक पर विचार करते हैं। दूसरी तरफ यह उत्तर उन लोगों से अपील कर सकता है जिनके मस्तिष्क एक निश्चित तरीके से वायर्ड हैं। हम सभी एक ही मोल्ड से नहीं डाले गए हैं। फिर फिर इस जवाब में पहले से ही एक वोट है, इसलिए हम लोकतंत्र को अपना कोर्स करने देंगे। - WinEunuuchs2Unix
ओह कृपया। आप और मैं दोनों जानते हैं कि संपादक को बदला जा सकता है। - muru
@muru हां शायद क्योंकि आपने मुझे सिखाया और मैंने संपादक को नैनो या कुछ अन्य सीएलआई जैसे कुछ बदलना सीखा। लेकिन मैं जीएडिट शिविर में हूं। के अतिरिक्त crontab -e मिनटों, घंटों, आदि के लिए तारों की यादें ("*") लाती हैं जिन्हें मैंने हमेशा पाया है कि मुझे निर्देशों के लिए Google की आवश्यकता है। मुझे अभी भी उपयोग मिल रहा है /etc/cron.d तथा /etc/cron.daily मेरी पसंद के लिए जाओ। विशेष रूप से यह दर्पण के बाद से /etc/udev/rules.d तथा /etc/systemd/system-sleep तरीकों। यह बस एक अच्छा फिट की तरह लगता है। - WinEunuuchs2Unix