2011-08-11 6 views
5

मैंने अभी अपना ऐप समाप्त कर लिया है और इसे तैनात करना चाहते हैं। लेकिन एक सेवा/deamon के रूप में मेरे ऐप कैसे चलाने के लिए?ऐपेंगिन के बाहर webapp2 चलाना, इसे सेवा/डेमॉन के रूप में कैसे चलाएं?

एक गूगल खोज, मुड़ और Can I run a Python script as a service? कुछ अजगर लाइब्रेरी का उपयोग कर कुछ अलग approches दिखाया। लेकिन यह पता नहीं लगा सकता कि इसे कैसे किया जाए।

कोई भी ऐसा करता है? क्या कोई सर्वोत्तम अभ्यास दृष्टिकोण है?

..fredrik

+0

आप इसे डेमॉन के रूप में क्यों चलाना चाहते हैं? – moraes

+0

'पायथन main.py' के साथ चल रहा है और थोड़ा असुरक्षित लगता है। यदि यह विफल/क्रैश हो जाता है तो मैं इसे स्वचालित रूप से पुनरारंभ करना चाहूंगा, डेमॉन को लॉग फ़ाइल में भी लिखना होगा। – fredrik

+0

@fredrik मैंने क्रैश हैंडलिंग और मेरे उत्तर – MatToufoutu

उत्तर

4

आप अपने आवेदन स्टैंडअलोन चलाने के लिए (अगर मैं सही ढंग से समझ में आ), आप किसी भी अन्य (गैर वेब) आवेदन के साथ इस तरह संभाल सकता चाहते हैं के रूप में।

यदि आप बस अपने प्रोग्राम को पृष्ठभूमि में चलाने के लिए चाहते हैं, तो आप this receipe पढ़ सकते हैं जो बताता है कि डिमन एप्लिकेशन कैसे बनाएं और इस विषय (टिप्पणियों में) के बारे में अच्छी चर्चा करें।

दूसरी ओर, आप अपने अनुप्रयोग के साथ एक "प्रणाली डेमॉन" (जो हर सिस्टम के स्टार्टअप पर शुरू होता है) बनाने के लिए चाहते हैं, तो मैं एक खोल स्क्रिप्ट के साथ जाना चाहते हैं। अपने सिस्टम के लिए स्टार्टअप स्क्रिप्ट बनाने के तरीके को देखने के लिए, आप अपनी मशीन पर अन्य स्टार्टअप स्क्रिप्ट से प्रेरणा प्राप्त कर सकते हैं। एक समाधान इस तरह से आप भी अपने प्रक्रिया को रोकने में सक्षम होगा python my_app.py & के साथ पृष्ठभूमि (स्टार्टअप स्क्रिप्ट से) में अपने कार्यक्रम चलाने के लिए, और फिर $! चर का उपयोग प्रक्रिया 'पीआईडी ​​पाने के लिए और एक फ़ाइल में संग्रहीत करते हैं, हो सकता है "पीआईडी ​​फ़ाइल" पढ़ने और kill आदेश (एक अपनी प्रक्रिया SIGINT करने के लिए एक KeyboardInterrupt अपवाद अपने आवेदन में उठाया जा भड़काने जाएगा भेजने) का उपयोग करके।

संपादित करें:

अपने प्रश्न टिप्पणी में, आप python main.py & प्रयोग करने के लिए असुरक्षित हो सकता है (आवेदन अगर यह विफल/दुर्घटनाग्रस्त पुनः आरंभ नहीं होता है, लेकिन जो आपके सिस्टम पर किसी अन्य डेमॉन के साथ एक ही है कहना उदाहरण के लिए, अगर अपाचे क्रैश हो गया है, तो यह स्वयं से पुनरारंभ नहीं होगा)। यदि आप क्रैश होने पर अपने एप्लिकेशन को पुनरारंभ करना चाहते हैं, तो आपको दूसरा डिमन लिखना होगा, यदि आपका एप्लिकेशन अभी भी चल रहा है, तो नियमित अंतराल पर जांच करेगा, और यदि आवश्यक हो तो इसे पुनरारंभ करें।

लॉगिंग चीज़ के बारे में, आप या तो अपना आवेदन आउटपुट stdout/stderr पर कर सकते हैं और इसे स्टार्टअप स्क्रिप्ट (python main.py &> /path/to/app.log &) से रीडायरेक्ट कर सकते हैं या logging मॉड्यूल का उपयोग करके अपने एप्लिकेशन से लॉगिंग संभाल सकते हैं।

+0

पर लॉगिंग के बारे में विवरण जोड़ा। लॉगिंग के बारे में: जब मैं 'पायथन main.py' चलाता हूं तो यह "http://127.0.0.1:8080 पर सेवा" प्रदर्शित करता है। लेकिन जब मैं 'sudo python main.py &> /var/log/apns.log चलाता हूं और' लॉग फ़ाइल में कुछ भी नहीं जोड़ा जाता है। Main.py में 'logging.info ('start') 'भी कोशिश की। लॉग फ़ाइल के साथ कुछ भी नहीं होता है (लेकिन सर्वर ओकी शुरू होता है)। कोई उपाय? – fredrik

+0

@fredrik शायद आपके ऐप में/var/log – MatToufoutu

+0

@agf में लिखने का अधिकार नहीं है: '&>' पहले से ही stdout और stderr दोनों को रीडायरेक्ट करता है – MatToufoutu

2

वैकल्पिक रूप से, आप आसानी से चलाने के लिए और supervisord साथ deamonized प्रक्रिया को नियंत्रित और भी लोग इन इसकी stdout/stderr उत्पादन कर सकते हैं।

+0

http://packages.ubuntu.com/supervisor | http://packages.gentoo.org/package/app-admin/supervisor | http://aur.archlinux.org/packages.php?K=supervisor | http://rpm.pbone.net/index.php3?stat=3&search=supervisor * (संपादित स्वरूपण) * – iki

1

दुष्प्रचार एक अजगर स्क्रिप्ट वास्तव में अजगर दुष्प्रचार कर रहा है।

आप रूट कर रहे हैं, कि काम करने के लिए जीएनयू स्क्रीन का उपयोग पर विचार करें। स्क्रीन स्वयं टर्मिनल नियंत्रण को संभालेगी जो आमतौर पर डेमॉन प्रक्रिया बनाने के संबंध में सबसे जटिल कार्य है।

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

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

लेकिन स्क्रीन का उपयोग करने से क्रैश से बचने में मदद नहीं मिलती है, क्रैश हमेशा प्रोग्रामर को किस तरह से निपटना पड़ता है।

संबंधित मुद्दे