जब हम पुनरारंभ या तैनाती करते हैं तो हमें Resque::TermException (SIGTERM)
या Resque::DirtyExit
के साथ असफल कतार में कई रेजिक नौकरियां मिलती हैं।रेस्क्यू :: टर्मएक्सप्शन या हेगोकू पर SIGTERM से पुनर्प्राप्त करना
हम नए TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10
हमारे Procfile में उपयोग कर रहे हैं तो हमारे कार्यकर्ता लाइन लगता है:
worker: TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake environment resque:work QUEUE=critical,high,low
हम भी resque-retry
उपयोग कर रहे हैं जो मैंने सोचा था कि इन दो अपवाद पर हो सकता है ऑटो पुन: प्रयास? लेकिन ऐसा नहीं लगता है।
- हम स्वयं हर काम में
Resque::TermException
से बचाव कर सकता है, और इस का उपयोग काम को फिर से शेड्यूल:तो मैं दो सवाल लगता है। लेकिन क्या सभी नौकरियों के लिए ऐसा करने का एक साफ तरीका है? एक बंदर पैच भी।
- पुन: पुनः प्रयास नहीं करना चाहिए पुनः प्रयास करें? क्या आप किसी भी कारण से सोच सकते हैं कि ऐसा क्यों नहीं होगा?
धन्यवाद!
संपादित करें: 10 सेकंड से कम समय में पूरा करने के लिए सभी नौकरियां प्राप्त करना पैमाने पर अनुचित लगता है। ऐसा लगता है कि Resque :: DirtyExit अपवाद चलाए जाने पर इन नौकरियों को स्वचालित रूप से फिर से कतारबद्ध करने का एक तरीका होना चाहिए।
upvoted और स्वीकार किए जाते हैं - मैं ईमानदारी से यकीन है कि अगर हम हालांकि 10 सेकंड के तहत उन सब को मिल सकता है नहीं कर रहा हूँ। हमारे पास कुछ बड़े निर्यात आदि हैं जिन्हें एक फ़ाइल उत्पन्न करने की आवश्यकता है। पुन: enquueing लगता है जैसे यह हल करता है हालांकि? क्या आप साझा कर सकते हैं कि 'Resque :: TermException' और 'Resque :: DirtyExit' के बीच क्या अंतर है। मुझे 'Resque :: DirtyExit' के लिए वहां एक बचाव है लेकिन यह हमेशा फिर से enqueue प्रतीत नहीं होता है। धन्यवाद! –
अद्यतन के रूप में, वे नौकरी में 'बचाव बचाव :: DirtyExit' होने के बावजूद कभी-कभी उन अपवादों को स्पष्ट रूप से नहीं बचाते हैं। मैं समझने में सक्षम नहीं हूं क्यों। यह हमारी नौकरियों को अविश्वसनीय बना रहा है क्योंकि हम अभी भी उन्हें Resque :: DirtyExit अपवादों के साथ असफल कतार में पाते हैं। यह वास्तव में एक समस्या बन रहा है –
क्या कोई सलाह दे सकता है कि कार्यकर्ता को कार्यकर्ता के अंदर SIGTERM को कैसे संभालना चाहिए ताकि कार्यकर्ता खुद को साफ कर सके? उदाहरण के लिए, क्या (रेस्क्यू) कार्यकर्ता SIGTERM को भी फंसाना चाहिए और कुछ चर सेट करना चाहिए कि लूपिंग कोड समय-समय पर निरीक्षण करता है? मैं मानता हूं कि TermException या DirtyException केवल RESQUE_TERM_TIMEOUT सेकेंड के बाद रैली की जाती है। –