स्टार्टअप पर पायथन स्क्रिप्ट चला रहा है


29

यह प्रश्न पहले भी कई बार पूछा जा चुका है, लेकिन मुझे मौजूदा जानकारी का उपयोग करके यह काम नहीं मिला।

मेरा पाई रास्पियन चलाता है। मेरे पास एक पायथन स्क्रिप्ट है जिसका नाम dnscheck.py है जो हमेशा के लिए बंद हो जाता है।

मुझे इसे बूट पर चलाने की आवश्यकता है। मुझे पता है कि मुझे एक .sh फाइल बनानी होगी जिसमें कुछ ऐसा हो

sudo python dnscheck.py &

मुझे नहीं पता कि यह फ़ाइल कहाँ होनी चाहिए या अगर इसमें कुछ और होना चाहिए। मुझे init.d फ़ोल्डर के बारे में पता है, लेकिन कंकाल का उदाहरण देखकर मुझे लगता है कि इस सरल कार्य को करने का एक सरल तरीका होना चाहिए।


एक वास्तविक आसान तरीके के लिए स्टेप टुटोरिअल द्वारा इस स्टेप को चेक करें -> youtu.be/Tvnrx-2QaUU आप जितने भी लॉन्चर लॉन्च करते हैं, उतने ही लॉन्च करें और उन सभी को क्रेसटब में एडजस्ट करें
होसैन आरएम

जवाबों:


20

यदि आप कंकाल स्क्रिप्ट का उपयोग करके स्टार्ट, स्टॉप, रिस्टार्ट आदि कमांड के साथ प्रक्रिया को नियंत्रित करना चाहते हैं और इसे अपने उद्देश्यों के लिए बदलना सबसे अच्छा विकल्प हो सकता है।

यदि आप अभी प्रक्रिया शुरू करना चाहते हैं, तो कमांड डालें /etc/rc.local। (मेरे पास मेरी आरपीआई नहीं है, लेकिन मैंने ऑनलाइन पढ़ा कि वहां एक 'एक्जिट 0' लाइन है, आपको इस लाइन के ऊपर अपनी कमांड डालनी चाहिए)


1
इसने काम कर दिया! मुझे उस स्क्रिप्ट को जोड़ने की अनुमति देनी चाहिए और 755 पर वापस लौटना होगा (पढ़ना / लिखना / निष्पादित करना) एक आवश्यक है। निश्चित नहीं है कि दोनों को इस सेटिंग की आवश्यकता है, लेकिन यह मेरे लिए काम करता है। सहायता के लिए बहुत - बहुत धन्यवाद!
व्लाद श्नाकोवस्ज़की

7
"जैसा कि आपने इसे अपने प्रश्न में लिखा है" काफी नहीं - आपको rc.localरूट के रूप में सुडो की आवश्यकता नहीं है । आपको स्क्रिप्ट को पूरा रास्ता भी बताना चाहिए, जाहिर है आप यह भी जोड़ना चाहिए& ताकि स्क्रिप्ट कांटे, जैसे अंत में /path/to/foobar.py &
गोल्डीलॉक्स

1
@goldilocks क्या आप बता सकते हैं कि मुझे जोड़ने की आवश्यकता क्यों है &? क्योंकि जब मैं इसके बिना उपयोग करता हूं, तब भी सब कुछ उम्मीद के मुताबिक काम कर रहा है।
Hu.P.PNNhu

2
@ Huy.PhamNhu आपके प्रश्न का उत्तर दे रहा है: Pi बूटअप पर इस कार्यक्रम को चलाएगा, और अन्य सेवाएं शुरू होने से पहले। यदि आप एम्परसैंड को शामिल नहीं करते हैं और यदि आपका प्रोग्राम लगातार चलता है, तो पाई अपनी बूट प्रक्रिया को पूरा नहीं करेगा। एम्परसेंड कमांड को एक अलग प्रक्रिया में चलाने की अनुमति देता है और मुख्य प्रक्रिया के चलने के साथ बूट करना जारी रखता है।
अमीन हरबाउई

6

अपनी स्क्रिप्ट को स्थानांतरित करें (हम इसे फ़ाइल में सहेजेंगे dnscheck) /etc/init.d/और अनुमतियाँ सेट करें ताकि इसे चलाया जा सके:

chmod 755 /etc/init.d/dnscheck

अपनी स्क्रिप्ट के शीर्ष पर LSB init टैग जोड़ें । आप संभवतः अपनी स्क्रिप्ट को फिट करने के लिए आवश्यक-प्रारंभ / स्टॉप और विवरण टैग को बदलना चाहेंगे।

### BEGIN INIT INFO
# Provides:          dnscheck
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

फिर रन करके प्रतीकात्मक लिंक बनाएं

update-rc.d /etc/init.d/dnscheck defaults

2
कृपया यह नहीं है कि जब यह 3 1/2 साल पहले एक सभ्य जवाब था, और अभी भी काम करेगा क्योंकि रास्पियन की नई इनिट प्रणाली LSB / SysV शैली लिपियों के साथ पीछे की ओर संगत है, नए उपयोगकर्ता इसके बजाय नई प्रणाली का उपयोग करने के लिए सीखना बेहतर होगा ( सिस्टमड) ) अगर सिर्फ एक लाइन जोड़ने के लिए /etc/rc.localअपर्याप्त है।
गोल्डीलॉक्स

3

ऐसा करने के कई तरीके हैं, निश्चित रूप से, लेकिन उपयोग करना मत भूलना cron। यदि आप @rebootअपने क्रेस्टैब में एक लाइन डालते हैं , तो उस कमांड को हर रीस्टार्ट पर निष्पादित किया जाएगा।

परीक्षण करने के लिए, मैंने निम्नलिखित लाइन को अपने उपयोगकर्ता क्रॉस्टैब के साथ जोड़ दिया crontab -e: @reboot echo "$(date)" >> ~/boot.txt इस पद्धति का बोनस यह है कि आप नौकरी को केवल बूट समय के अलावा अन्य अंतराल पर आवश्यकतानुसार कॉल कर सकते हैं, और आपको init स्क्रिप्ट को संपादित करने की आवश्यकता नहीं है।


3

यदि आप rc.local फ़ाइल का उपयोग करते हैं, तो यह समस्या निवारण के लिए सहायक हो सकता है। आप लॉग फाइल में लॉग त्रुटियों (stderr) और कमांड आउटपुट (stdout) में लॉगिंग लाइनें जोड़ सकते हैं। इस उदाहरण के अनुसार वह फ़ाइल /tmp/rc.local.log में सेव होती है

#!/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.

exec 2> /tmp/rc.local.log      # send stderr from rc.local to a log file
exec 1>&2                      # send stdout to the same log file

# Your other commands...

exit 0

पढ़ें अधिक


3

मैं वास्तव में आश्चर्यचकित हूं कि djb के डेमोंटोल्स का उल्लेख यहां नहीं किया गया है। Daemontools उचित प्रक्रिया पर्यवेक्षण करता है और आप स्वचालित रूप से घुमाए गए लॉगिंग जैसे शांत सुविधाओं को जोड़ सकते हैं। TL; DR यदि आप इससे किसी भी परिचित नहीं हैं, तो आपकी प्रक्रिया हर बार विफल होने पर फिर से शुरू हो जाएगी और जब आपका पाई चालू हो जाएगा तो स्वचालित रूप से शुरू हो जाएगा। यह बहुत अच्छा है यदि आपने एक खराब पायथन प्रोग्राम लिखा है जिसमें विफलता मोड हैं लेकिन आप नहीं चाहते कि कोई त्रुटि होने पर बस मर जाए।

इंस्टॉल करें:

sudo apt-get install डेमोंटोल्स daemontools-run

फिर डीमॉनेटाइज़्ड प्रक्रियाएँ बनाने के लिए चरणों का पालन करें:

यह ज्यादातर runस्क्रिप्ट को /etc/service/<my_custom_service_name>दूसरे पर्क में कॉपी करने जितना आसान है : आप किसी भी उपयोगकर्ता या रूट के रूप में चला सकते हैं! लिंक में विवरण।

एफडब्ल्यूआईडब्ल्यू मेरे पास एक पीआई परियोजना थी जहां मेरे पास 3 अलग-अलग अजगर प्रक्रियाएं थीं (प्रत्येक में एक सीपीयू समय का उपयोग करके एक निष्पादन लूप था इसलिए 3 प्रक्रियाओं का उपयोग करके मैंने प्रत्येक प्रक्रिया को 1 सीपीयू कोर का लाभ उठाने की अनुमति दी थी)। Daemontools ने मुझे यह सुनिश्चित करने की अनुमति दी कि सभी 3 स्वचालित रूप से चलेंगे और पाई में प्लग किए जाने के बाद चलेंगे।


सरल और आसान समाधान, आप उत्तर दिया है बहुत समय बचाया, धन्यवाद ..
शिवागुंटुकु

2

यहां समाधान है जो मैं लगातार उपयोग करता हूं।

एक डेस्कटॉप फ़ाइल बनाएँ

xyz.desktop

इसमें निम्नलिखित टाइप करें

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=<Application Name Goes here>
Comment=
Exec=  python /home/pi/Desktop/execute_on_boot.py
StartupNotify=false
Terminal=true
Hidden=false

इस फ़ाइल को इसमें पेस्ट करें

/home/pi/.config/autostart/

और अपने रास्पबेरी पाई को फिर से शुरू करें और इसे अपने प्रोग्राम को नए टर्मिनल में स्वचालित रूप से चलाना चाहिए


कई सवालों के जवाब में कटौती और पेस्ट न करें। यदि उत्तर समान है तो नए संस्करण को डुप्लिकेट के रूप में फ़्लैग किया जाना चाहिए।
स्टीव रोबिलार्ड

केवल यही कारण है कि मैं ऐसा नहीं कर पाया था क्योंकि इस पृष्ठ पर अन्य के विपरीत बड़ी संख्या में दृश्य थे।
evolutionizer

@SteveRobillard मैं भी न मैं प्रतिनिधि ऐसा करने की आवश्यकता है लगता है
evolutionizer

किसी पोस्ट को फ़्लैग करने में केवल 15 प्रतिनिधि लगते हैं। यह तय करना कि इसके बारे में क्या करना है मध्यस्थों का काम - इसलिए विचारों की संख्या अप्रासंगिक है। डुप्लिकेट उत्तर स्वचालित रूप से सिस्टम द्वारा चिह्नित किए जाते हैं। वे गेमिंग सिस्टम का एक रूप हैं। इसलिए, मैंने तीसरे को हटा दिया।
स्टीव रोबिलार्ड

@SteveRobillard जानकारी के लिए धन्यवाद और मेरी अज्ञानता को क्षमा करें। मैंने पिछले प्रश्न को डुप्लिकेट के रूप में चिह्नित किया है।
विकासवादी

2

.Py फ़ाइल का उपयोग करने के लिए, बस #!/usr/bin/pythonअपनी फ़ाइल के आरंभ में लाइन डालें। फिर इसके साथ निष्पादन योग्य बनाएं chmod +x filename। इसके बाद, लाइन /path/to/file.py &को लाइन से /etc/rc.localपहले जोड़ें exit 0( /path/to/file.pyअपनी स्क्रिप्ट के पथ के साथ स्वैप करना)। यह आपके अजगर स्क्रिप्ट को बूट के अंत में निष्पादित करेगा।


0

यहाँ एक और भी आसान तरीका है जो मेरे लिए काम करता है। LXDE में ऑटोस्टार्ट को संशोधित करें।

एक टर्मिनल खोलें और ऑटोस्टार्ट फ़ाइल को निम्नानुसार संपादित करें:

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

पाठ की निचली पंक्ति को नीचे की ओर जोड़ें (जहाँ आपका उदाहरण थिंकपैड स्थित है, वहां पथ को संशोधित करें)

@/usr/bin/python /home/pi/example.py

ctr-x, और सहेजें। आपको निम्नानुसार अजगर स्क्रिप्ट को निष्पादन योग्य बनाने की आवश्यकता हो सकती है:

sudo chmod +x /home/pi/example.py

LXDE में ऑटोस्टार्ट के लिए संदर्भ और अजगर को निष्पादन योग्य बनाने के लिए संदर्भ


ध्यान दें कि यदि आप एक gui में शुरू नहीं करते हैं तो यह काम नहीं करेगा (यानी: अपने पीआई को बिना सिर के दौड़ना)
हवनार

0

ये समाधान मेरे लिए काम नहीं कर रहा था, जिससे फेह के साथ एक पायथन स्क्रिप्ट शुरू करने की कोशिश की जा रही थी। निम्नलिखित ने काम किया। यह लॉगिन के बाद एक स्क्रिप्ट शुरू करता है।

एक टर्मिनल सत्र खोलें और फ़ाइल को संपादित करें

sudo nano /etc/profile

फ़ाइल के अंत में निम्न पंक्ति जोड़ें

/home/pi/your_script_name.sh

स्क्रिप्ट नाम और पथ को सही नाम और अपने स्टार्ट-अप स्क्रिप्ट के पथ से बदलें। सुरषित और बहार

फ़ाइल को बचाने के लिए Y द्वारा पीछा नैनो संपादक से बाहर निकलने के लिए Ctrl + X दबाएं।

यहाँ मेरी पटकथा क्या है।

#!/bin/sh
cd /
cd home/pi/
sudo python your_python_sript.py &
exit 0
cd /

मुझे लगता है कि मैंने chmod का उपयोग करके script.sh और script.py दोनों निष्पादन योग्य बना दिया है

sudo chmod +x home/pi/your_script_name.sh
sudo chmod +x home/pi/your_python_script.py
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.