हम ऑफ़लाइन कार्यों को प्रबंधित करने के लिए हमारे Django वेबएप के साथ सेलेरी का उपयोग करते हैं; इनमें से कुछ कार्य 120 सेकंड तक चल सकते हैं।कार्यों में देरी किए बिना सेलेरी को शानदार ढंग से पुनरारंभ कैसे करें
जब भी हम कोई कोड संशोधन करते हैं, तो हमें इसे नए पायथन कोड को पुनः लोड करने के लिए सेलेरी को पुनरारंभ करने की आवश्यकता होती है। हमारा वर्तमान समाधान मुख्य सेलरी प्रक्रिया (kill -s 15 `cat /var/run/celeryd.pid`
) में एक सिगरेट भेजने के लिए है, फिर इसे मरने के लिए प्रतीक्षा करें और इसे पुनरारंभ करें (python manage.py celeryd --pidfile=/var/run/celeryd.pid [...]
)।
, यह आम तौर पर बंद एक या दो मिनट, जिसके दौरान कोई नए कार्य कार्रवाई की जाती है ले जाएगा, वर्तमान में साइट पर उपयोगकर्ताओं के लिए एक ध्यान देने योग्य देरी के कारण होता है। मैं सेलेरी को बंद करने के लिए कहने का एक तरीका ढूंढ रहा हूं, लेकिन फिर नए कार्यों को चलाने के लिए तुरंत एक नया सेलेरी इंस्टेंस लॉन्च करें।
हालात नहीं कि किया काम: एक गर्म बंद करके इस वजह से अजवाइन को प्रयास करने के लिए "पुनः आरंभ" और फिर खुद को दोबारा लॉन्च:
- मुख्य प्रक्रिया को SIGHUP भेजा जा रहा है। न केवल इसमें काफी समय लगता है, यह काम भी नहीं करता है, क्योंकि स्पष्ट रूप से पुरानी प्रक्रिया से पहले नई प्रक्रिया शुरू होती है, इसलिए नया व्यक्ति
ERROR: Pidfile (/var/run/celeryd.pid) already exists. Seems we're already running? (PID: 13214)
शिकायत करता है और तुरंत मर जाता है। (यह सेलरी में एक बग की तरह दिखता है; मेरे पास let them know है।) - मुख्य प्रक्रिया में SIGTERM भेजना और फिर तुरंत एक नया उदाहरण लॉन्च करना: Pidfile के साथ एक ही समस्या।
- पूरी तरह से पिडफाइल को अक्षम करना: इसके बिना, हमारे पास यह कहने का कोई तरीका नहीं है कि 30 सेलेरी प्रक्रिया मुख्य प्रक्रिया है जिसे सिगरेट भेजा जाना चाहिए जब हम इसे गर्म शट डाउन करना चाहते हैं। यह जांचने का कोई भरोसेमंद तरीका नहीं है कि मुख्य प्रक्रिया अभी भी जिंदा है या नहीं।
शायद http://stackoverflow.com/questions/9764913/how-do-i-restart-celery-workers-gracefully/16717128#16717128 का मेरा उत्तर आप मदद करता है। – guettli