बूट पर स्वचालित रूप से एक आवेदन कैसे शुरू करें


27

मैं लिनक्स के लिए नया हूं और आवेदन शुरू करने के लिए तत्पर हूं (जो कि प्रत्येक 10 सेकंड का नेतृत्व करता है)। मैंने एप्लिकेशन प्रोग्राम लिखा है और यह ठीक काम कर रहा है, लेकिन अब मैं इसे बूट पर स्वचालित रूप से शुरू करना चाहता हूं।

दस्तावेज़ यहाँ/etc/init.d निर्देशिका के लिए स्टार्टअप स्क्रिप्ट की प्रतिलिपि बनाने और निर्देशिका में प्रतिलिपि स्क्रिप्ट के लिए एक प्रतीकात्मक लिंक बनाने के लिए कहता है rc.d

इन स्क्रिप्ट फ़ाइलों का विस्तार और नाम क्या होना चाहिए? क्या हम मैन्युअल रूप से प्रतीकात्मक लिंक जोड़ सकते हैं rc.dया इसके लिए कुछ विशिष्ट प्रक्रिया है?

कोई सुझाव कैसे इसे प्राप्त करने के लिए?


स्टार्टअप में एक init स्क्रिप्ट जोड़ने का पसंदीदा तरीका डिस्ट्रोस द्वारा भिन्न होता है। कुछ भी उन्हें upstart और systemd के पक्ष में चरणबद्ध कर रहे हैं। मैं पृष्ठभूमि के लिए बस "और" का उपयोग करने की अनुशंसा नहीं करूंगा, क्योंकि डेबियन के start-stop-daemonहैंडल की तरह कुछ इसे बेहतर करता है (हालांकि यह बेहतर है कि कार्यक्रम खुद को निष्क्रिय करता है)। आप किस डिस्ट्रो का उपयोग कर रहे हैं? डेस्कटॉप MIME प्रकारों के बाहर, फ़ाइल एक्सटेंशन * nix में अर्थहीन हैं और इसका पसंदीदा कार्य निष्पादन योग्य नहीं है।
जोर्डम

यदि आप पेटोग्लिक्स का उपयोग कर रहे हैं, तो बस उस प्रलेखन का पालन करें - किसी विशेष नाम की आवश्यकता नहीं है, जैसा वे कहते हैं वैसा ही करें। क्या तुमने कोशिश की? आपको किस तरह की समस्या हो रही है? (यदि नहीं, तो कृपया अपने डिस्ट्रो को निर्दिष्ट करें और बताएं कि आपने जो भी कोशिश की वह काम नहीं करता है।)
Mat

मैं आरपी के लिए डेबियन "मट्ठा" का उपयोग कर रहा हूं।
कण्ठ

1
यदि आपको इसे लगभग 10 सेकंड (यानी 10 सेकंड तेज नहीं) करने की आवश्यकता है, तो आप cronइसके बजाय उपयोग करना चाह सकते हैं ।
पेट्रॉफ

@peterph: लेकिन ऐसा लगता है कि प्रोग्राम हर 10 सेकंड में एलईडी को टॉगल करता है, न कि हर 10 सेकंड में निष्पादित होने वाला प्रोग्राम।
जोरावर

जवाबों:


19

यहाँ http://www.debian-administration.org/articles/28 का अंश दिया गया है, जो आपके प्रश्न का उत्तर देता है।

नोट: उदाहरण के लिए नीचे दी गई स्क्रिप्ट में, start)वास्तव में आपके प्रोग्राम को लॉन्च करने के लिए " " सेक्शन में कॉल जोड़ें । आप सिस्टम को रिबूट किए बिना स्क्रिप्ट की कार्यक्षमता का परीक्षण कर सकते हैं: इसे पूर्ण पथ के साथ कॉल करें और इसे " start" " " और " stop" के एक पैरामीटर दें

यहाँ जाता हैं:

डेबिन कमांड निष्पादित करने के लिए init सिस्टम की तरह Sys-V का उपयोग करता है जब सिस्टम रनवेल में परिवर्तन होता है - उदाहरण के लिए बूटअप और शटरिंग टाइम।

यदि आप मशीन को बूट करने के लिए एक नई सेवा शुरू करना चाहते हैं तो आपको निर्देशिका में आवश्यक स्क्रिप्ट जोड़ना चाहिए /etc/init.d/। उस निर्देशिका में पहले से मौजूद कई स्क्रिप्ट आपको उन चीजों का एक उदाहरण देंगे, जो आप कर सकते हैं।

यहाँ एक बहुत ही सरल लिपि है जिसे दो भागों में विभाजित किया गया है, कोड जो हमेशा चलता रहता है, और कोड जो "स्टार्ट" या "स्टॉप" के साथ बुलाया जाता है।

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

एक बार जब आप अपनी फ़ाइल को सही स्थान पर सहेज लेते हैं, तो सुनिश्चित करें कि यह " chmod 755 /etc/init.d/blah" चलाकर निष्पादन योग्य है ।

फिर आपको सिस्टम को नीचे जाने, या ऊपर आने पर स्क्रिप्ट को निष्पादित करने के लिए उपयुक्त प्रतीकात्मक लिंक जोड़ने की आवश्यकता है।

ऐसा करने का सबसे सरल तरीका डेबियन-विशिष्ट कमांड का उपयोग करना है update-rc.d:

root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah

क्या मुझे वास्तव में इस स्क्रिप्ट को etc / init.d / में रखना है या क्या शीर्ष पर पंक्ति, # /etc/init.d/blah, शेल को एक स्थान दर्शाती है?
user137717

मैं "-श: अपडेट-आरओडीडी: कमांड नहीं मिला"
m4l490n

2
नए सिस्टम systemdबूटअप कॉन्फ़िगरेशन के लिए सहित कई चीजों के लिए नियोजित करते हैं। systemctlनियंत्रण और कॉन्फ़िगर करने के लिए उपयोग करें systemd
अलेक्जेंडर शेकब्लिकिन

4

सबसे अच्छा तरीका है कि आप नियमित वितरण सेवा के लिए अपने वितरण के पैकेज स्रोत की जांच करें, जैसे ओपनएसएसएच के लिए - आप देखेंगे कि अच्छे व्यवहार क्या हैं। आखिरकार, ओपन-सोर्स के पीछे एक कारण स्रोतों से सीखने में सक्षम होना है।


2
बहुत बढ़िया सलाह! वास्तव में बुद्धिमान और प्रासंगिक, और सभी डिस्टोस को देखते हैं। (और संयोग से "लिनक्स के लिए नया" और "मैं यह कैसे करूँ" सवाल का हिस्सा है। मैं इस उत्तर का उपयोग अपनी शुरुआत स्टॉप स्क्रिप्ट को बेहतर बनाने के लिए करूंगा।
ब्रूस0

3

पर्यवेक्षक का उपयोग करें, एक प्रभावी कार्यक्रम जो तर्क के साथ स्टार्टअप अनुप्रयोगों का प्रबंधन और लॉग करता है। Http://supervisord.org/running.html और (स्थापना निर्देश का पालन करें) से अधिक जानें ।

/etc/supervisor/conf.d/{PROGRAM_NAME}.confयहाँ एक फ़ाइल बनाएँ और यहाँ एक कोड है,

[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true  
autorestart=true  
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log  
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log  

फिर cmd लाइन से निष्पादित करें:

supervisorctl reload


जबकि आपका उत्तर ठीक है, मुझे लगता है कि आपको यह दिखाने के लिए इसे बदल देना चाहिए कि "पर्यवेक्षक पुनः लोड" को CLI से निष्पादित किया जाना है,
.conf

3

का उपयोग करना crontabबहुत आसान है।

crontab -eउपयोगकर्ता के crontab को संपादित करने के लिए उपयोग करें।
अंत में निम्नलिखित पंक्ति जोड़ें:

@reboot <command>

उदाहरण:

  • @reboot my_script.sh
  • @reboot python my_script.py arg1 arg2

अंत crontab -lमें यह सुनिश्चित करने के लिए उपयोग करें कि आपकी स्क्रिप्ट सूची में जोड़ी गई थी।


मुझे आश्चर्य है कि इस उत्तर को क्यों प्राप्त हुआ? एक बहुत ही सरल समाधान की तरह लगता है, और एक है कि crontab का उपयोग करता है - जो शायद हर कोई जानता है और पहले से ही समझता है।
कोलिन्को

1

लिनक्स समर्थन के नए संस्करण systemd(जैसे @AlexanderShcheblikin ने कहा)। इसमें अधिक विशेषताएं हैं और डेबियन-विशिष्ट समाधान की तुलना में अधिक पोर्टेबल है।

कृपया इसे वास्तव में महान मार्गदर्शक पढ़ें

यहाँ नंगे न्यूनतम की एक त्वरित संदर्भ है :

  1. myscript.shनिष्पादन योग्य अनुमतियों के साथ एक स्क्रिप्ट (जैसे )।
  2. 644 अनुमतियों के myservice.serviceसाथ ".service" एक्सटेंशन के /etc/systemd/systemसाथ एक यूनिट फ़ाइल (जैसे ) जिसमें स्क्रिप्ट निष्पादित करने के लिए कमांड है। उदाहरण के लिए,

:

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh

[Install]
WantedBy=multi-user.target
  1. sudo systemctl enable myserviceइसे बूट पर शुरू करने में सक्षम करने के लिए कमांड चलाएँ ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.