मैं पृष्ठभूमि में पायथन स्क्रिप्ट कैसे चलाऊं और क्रैश के बाद इसे पुनः आरंभ करूं?


10

मेरे पास एक बहुत ही सरल पायथन स्क्रिप्ट है जिसे मैं हमेशा अपने उबंटू 12.04 सर्वर पर चलाना चाहूंगा। मैंने upstart + monit का उपयोग करने के बारे में सोचा। समस्या यह है कि उन उपकरणों को मेरे जैसे सरल नश्वर के लिए जटिल लगता है, और मुझे वेब पर एक सरल उदाहरण नहीं मिल सकता है।

क्या upstart + monit overkill है? क्या किसी को एक सरल विकल्प, या upstart + monit के लिए एक अच्छा ट्यूटोरियल पता है? अगर मैं सिर्फ यह सुनिश्चित करना चाहता हूं कि स्क्रिप्ट हमेशा चल रही है, तो क्या मोनिट की आवश्यकता है?


संदर्भ के लिए, सटीक एक ही सवाल यहां पूछा गया था: superuser.com/q/461546/786969
PHPirate

जवाबों:


16

इसे करने का सबसे सरल तरीका इस प्रकार है /etc/init/something.conf:

start on runlevel [2345]
stop on runlevel [016]

respawn
exec python /path/to/your/script.py

रेस्पॉन इसे वापस शुरू कर देगा यदि इसे मार दिया जाए या गैर-शून्य से बाहर निकाल दिया जाए (जैसे कि कोई अपवाद नहीं)। यह Ubuntu 10.04 पर वापस जा रहा है।

यदि आपके पास 12.04 है तो आप अधिक फैंसी पा सकते हैं। उपरोक्त आपकी स्क्रिप्ट को रूट के रूप में चलाएगा। 12.04 में आप setuid / setgid जोड़ सकते हैं:

start on runlevel [2345]
stop on runlevel [016]

respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py

यदि आपकी स्क्रिप्ट तब बाहर निकलती है जब कोई नेटवर्क उपलब्ध नहीं होता है और आप इसे अस्थिर नेटवर्क कनेक्शन पर चलाने की योजना बनाते हैं, तो ठीक है, आपको इसे ठीक करना चाहिए और बस इसे जीवित / पुनः बनाए रखना चाहिए। लेकिन अगर आप ऐसा नहीं कर सकते हैं, तो जब भी नेटवर्क डिवाइस आता है, तो आपको इसे मैन्युअल रूप से शुरू करने की भी आवश्यकता हो सकती है। तो आप इसे इसमें जगह बना सकते हैं /etc/network/if-up.d/yourscript(इसे chmod + x के साथ निष्पादित कर सकते हैं )

#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something

जहाँ आपकी स्क्रिप्ट इस विशिष्ट स्क्रिप्ट के लिए केवल कुछ मनमाना और अद्वितीय है, और "कुछ" नौकरी के नाम (जैसे कि /etc/init/something.confसुझाए गए) के समान है।


हाँ! तो यह upstartसही उपयोग कर रहा है? क्या इसका मतलब यह है कि स्क्रिप्ट को बूट पर भी शुरू किया जाएगा (जो बहुत अच्छा होगा!)। और respawnइतना पर्याप्त है कि आपको सेटअप करने की आवश्यकता नहीं है monit?
sebpiq

हां, 'रनलेवल पर शुरू [2345]' का अर्थ उस समय है जब सिस्टम "मल्टी यूजर मोड" में प्रवेश करता है। दीर्घावधि में 'पुराने नेटवर्क-सेवाओं को शुरू करने' और 'नेटवर्क-सेवाओं को रोकने पर रोक' जैसी चीजों के साथ बहुत पुरानी यूनिक्स "रनलेवल" को बदलने की योजना है ताकि यह अधिक तार्किक रूप से पढ़े।
SpamapS

बहुत बढ़िया ! बहुत बहुत धन्यवाद कि वास्तव में मुझे क्या चाहिए।
sebpiq

2

पुराने दिनों से सामान्य दृष्टिकोण एक फाइल लिखना था जिसमें एक टाइम स्टांप या प्रक्रिया आईडी था /tmpऔर फिर जांचें कि क्या यह प्रक्रिया आईडी अभी भी चल रहा था या सम्मानजनक रूप से अगर समय स्टाम्प अभी भी हाल ही में था।

साथ ही आप एक साधारण while [ 1 ]; do phyton-script.ph; doneविच भी कर सकते हैं , यदि यह वापस आने की स्थिति में स्क्रिप्ट को पुनः आरंभ करेगा।

अधिक संभावनाओं के लिए कृपया अपनी स्क्रिप्ट पर अधिक जानकारी प्रदान करें। विशेष रूप से आप इसे अप्रत्याशित रूप से बाहर निकलने या दुर्घटनाग्रस्त होने की उम्मीद क्यों करते हैं।


स्क्रिप्ट बस स्ट्रीमिंग एपीआई का उपयोग करते हुए ट्विटर्स से ट्वीट्स को स्क्रैप करता है। तो मूल रूप से एक अनंत लूप है जो ट्वीट्स को धकेलने के लिए इंतजार कर रहा है, कुछ कोड निष्पादित कर रहा है, और प्रतीक्षा करने के लिए वापस। मैं यही चाहता हूं कि यह बिना किसी चिंता के चल रहा हो ... अगर कोई बग है और यह दुर्घटनाग्रस्त हो जाता है, और इसी तरह ...
sebpiq

आपका ऐसा ही उत्तर (जो मैंने स्वीकार किया): superuser.com/questions/461546/…
sebpiq

यह जांचने के लिए कि क्या स्क्रिप्ट अभी भी चल रही है, एक क्रोन-जॉब एक ​​अच्छा विचार हो सकता है।
con-f-use
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.