2010-10-22 8 views
6

में कार्य करना डेमॉन के कार्यान्वयन किसी को भी एक काम कर और अच्छी तरह से प्रलेखित एक डेमॉन अजगर का उपयोग कर के कार्यान्वयन के बारे में पता है? यदि आप एक ऐसी परियोजना के बारे में जानते हैं जो इन दो आवश्यकताओं को फिट करता है तो कृपया यहां एक लिंक पोस्ट करें।अजगर

+0

काम env? यूनिक्स? –

+0

env ubuntu 10.10 है, पायथन 2.6 – RyanBrady

उत्तर

4

तीन विकल्प मुझे लगता है कि के-

  1. कि अपनी स्क्रिप्ट कॉल एक क्रॉन जॉब कर सकते हैं। क्रॉन एक जीएनयू/लिनक्स डिमन के लिए एक आम नाम है जो आपके द्वारा निर्धारित शेड्यूल के अनुसार समय-समय पर स्क्रिप्ट लॉन्च करता है। आप अपनी स्क्रिप्ट को क्रॉन्टाब में जोड़ते हैं या इसे एक विशेष निर्देशिका में सिमलिंक डालते हैं और डिमन पृष्ठभूमि में इसे लॉन्च करने का काम संभालता है। आप विकिपीडिया पर और पढ़ सकते हैं। विभिन्न क्रॉन डिमन्स की एक किस्म है, लेकिन आपके जीएनयू/लिनक्स सिस्टम को पहले से ही स्थापित होना चाहिए था।
  2. आपकी स्क्रिप्ट के लिए पाइथोनिक दृष्टिकोण (उदाहरण के लिए एक लाइब्रेरी) खुद को डिमोनिज़ करने में सक्षम होने के लिए। हां, इसके लिए एक साधारण इवेंट लूप की आवश्यकता होगी (जहां आपकी घटनाएं टाइमर ट्रिगरिंग हो सकती हैं, संभवतः, नींद फ़ंक्शन द्वारा प्रदान की जाती हैं)। यहां मैं सलाह देता हूं कि & उपयोग - A simple unix/linux daemon in Python
  3. पायथन multiprocessing मॉड्यूल का उपयोग करें। इस प्रक्रिया में एक प्रक्रिया आदि काटने की कोशिश करने की नीची-किरकिरा छिपी हुई है। यह बहुत साफ है।

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

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

+0

मैं सफलता के बिना # 2 कोशिश कर रहा हूं। यह एक बार डिमन फोर्क खुद की तरह है, मैं अब अपने django परियोजना का संदर्भ नहीं दे सकता। सोच रहा है कि यह एक पथ मुद्दा है। http://stackoverflow.com/questions/3992175/python-import-module-results-in-nameerror – RyanBrady

+0

क्या आपने दिए गए लिंक में कोड उदाहरण का पालन किया था? यह मेरे लिए ठीक काम करता है। –

+0

हाँ, मैंने इसका पालन किया। अपने daemon.py डाउनलोड किया, इसे subclassed। जब मेरी django परियोजना आयात करने की कोशिश कर रहा है यह विफल रहता है। – RyanBrady

4

यदि आप सिर्फ एक डिमन चलाने के लिए चाहते हैं, तो Supervisor पर विचार करें, एक डिमन जो खुद को नियंत्रित करता है और डिमन्स प्रबंधित करता है।

यदि आप नट-किरकिरा देखना चाहते हैं, तो आप Supervisor's launch script या lazyweb request पर कुछ प्रतिक्रियाएं देख सकते हैं।

1

चेक एक डबल कांटा डेमॉन के लिए इस लिंक: http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/

कोड पठनीय और अच्छी तरह से प्रलेखित है। यूनिक्स डेमन्स पर विस्तृत जानकारी के लिए आप डब्ल्यू रिचर्ड की पुस्तक 'यूनिक्स पर्यावरण में उन्नत प्रोग्रामिंग' के अध्याय 13 पर एक नज़र डालना चाहते हैं।