मैं डेमन्स के लिए नया हूं इसलिए माफी मांगना अगर यह एक नौसिखिया सवाल है।मैं पाइथन-डिमन के साथ एक डिमन कैसे स्थापित करूं?
कई अन्य उत्तरों में (उदाहरण के लिए, this question) लोगों ने सुझाव दिया कि python-daemon पैकेज जाने का तरीका था क्योंकि यह PEP 3143 मानक को पूरी तरह कार्यान्वित करता है।
दुर्भाग्यवश, पायथन-डेमन a bit light on documentation (या अधिक संभावना है कि मैं ज्ञान/अनुभव पर थोड़ी सी रोशनी हूं ...;)), और मुझे लगता है कि मुझे शायद कुछ मूलभूत याद आ रही है। यहाँ मैं क्या कर रहा है:
मैं निम्नलिखित:
import daemon
logfile = open('daemon.log', 'w')
context = daemon.DaemonContext(stdout = logfile, stderr = logfile)
context.open()
with context:
do_something_1()
do_something_2()
प्रश्न: मैं कैसे अजगर-डेमॉन के साथ एक डेमॉन की स्थापना की है, मैं यह कैसे शुरू करने और इसे रोकने के कर सकते हैं?
साइड नोट्स:
मैं मूल रूप से के बारे में एक जंगली अनुमान ले रहा हूँ कैसे/.open()
विधि यहाँ का उपयोग किया जाए - डॉक्स इस मुद्दे पर वास्तविक स्पष्ट नहीं थे। ऐसा लगता है कि मैं इसे शामिल करता हूं या नहीं।
तो, अब मैं क्या करूँ? जब मैं इस फाइल, जैसे चल रहा है कोशिश:
python startConsumerDaemons.py
यह do_something_1()
चलाने के लिए प्रकट होता है, लेकिन दूसरी नहीं। और, ऐसा लगता है कि प्रोग्राम टर्मिनल विंडो में संलग्न है। आईई, stdout रीडायरेक्ट नहीं किया गया है, और जब मैं टर्मिनल विंडो बंद करता हूं तो प्रक्रिया मारे जाती है। तो, मुझे पूरा यकीन है कि मैं यहाँ कुछ गलत कर रहा हूं ... मुझे अलग-अलग क्या करना चाहिए?
और, आखिरकार, जब मैं डिमन चल रहा हूं, तो मैं इसे कैसे रोक/पुनरारंभ करूं (उदाहरण के लिए यदि मैं अंतर्निहित कोड में परिवर्तन करता हूं)?
क्या पिछले 'with' क्या करना चाहिए है?(जब मॉड्यूल पहले आयात किए जाते हैं तो मॉड्यूल चलाए जाएंगे, जब तक कि मुझे कुछ याद नहीं आ रहा है, उन अंतिम वक्तव्य कुछ भी नहीं करेंगे) और "पहली स्क्रिप्ट चलाने पर दूसरा क्या नहीं" का मतलब क्या है? अगर कोई अपवाद नहीं उठाया गया तो मुझे पूरा भरोसा है कि दोनों सफलतापूर्वक भाग गए। – mgibsonbr
पता नहीं है कि "आखिरी" के साथ आपका क्या मतलब है (केवल एक ही है), लेकिन उदाहरण के लिए पायथन-डिमन के लिए कोड में, वह स्क्रिप्ट को एक कथन के रूप में निष्पादित करने के लिए रखता है जैसे कि (http: // www.python.org/dev/peps/pep-3143/)। पहली स्क्रिप्ट निष्पादित होती है और संदेशों को प्राप्त/संसाधित करने में सक्षम होती है (यह एक एमक्यू ब्रोकर पर उपभोक्ता है)। क्योंकि पहला अनंत लूप पर है, शायद स्टार्टकॉन्सरडेमन्स स्क्रिप्ट कभी दूसरी बार नहीं पहुंचती है? – CQP
आपके द्वारा पोस्ट किया गया उदाहरण ** आयात ** किसी अन्य फ़ाइल ('itial_program_setup', 'do_main_program', आदि) से कुछ विधियां और ** ** उन्हें ** (' do_main_program() ') कहते हैं, उनमें से एक 'के साथ' कथन के भीतर । जब तक कि पाइथन की कुछ अस्पष्ट विशेषता नहीं है, मुझे नहीं पता, मुझे विश्वास है कि ये बयान कुछ भी नहीं करेंगे। वैसे भी, जहां तक मैं समझ सकता था, 'पायथन-डेमन' वर्तमान में निष्पादन प्रोग्राम को यूनिक्स डिमन प्रक्रिया में बदल देता है, यह नई प्रक्रियाओं या नए धागे नहीं बनाता है। यदि कार्यक्रम का एक हिस्सा अनंत लूप में प्रवेश करता है, तो बाद के भाग बिल्कुल नहीं चलेंगे। – mgibsonbr