2012-04-02 13 views
11

सेल्टरी कार्यकर्ता को टीईआरएम सिग्नल जारी करने के बाद सीटीएलआर-सी कीबोर्ड इंटरप्ट का उपयोग करके दो बार (गर्म शटडाउन और ठंडा शटडाउन), सेलेरी कार्यकर्ता बस लटका हुआ है। यह संदेश नहीं ले रहा है या कार्यों को निष्पादित नहीं कर रहा है (जैसा कि अपेक्षित है) लेकिन यह या तो बंद नहीं हो रहा है।सेलेरी साफ क्यों बंद नहीं हो रही है?

मैंने दृश्य के पीछे क्या चल रहा है यह देखने के लिए सेलेरी प्रक्रियाओं पर strace चलाया।

strace -p 27874 
Process 27874 attached - interrupt to quit 
select(4, [3], NULL, NULL, {0, 562000}) = 0 (Timeout) 
futex(0x871a808, FUTEX_WAKE, 1)   = 0 
select(4, [3], NULL, NULL, {1, 0})  = 0 (Timeout) 
futex(0x871a808, FUTEX_WAKE, 1)   = 0 
...................................................... 

मैं जानता हूँ कि मैं करने के लिए प्रक्रियाओं के लिए एक KILL संकेत जारी कर सकता है: यहाँ अजवाइन मुख्य प्रक्रिया

strace -p 27867 
Process 27867 attached - interrupt to quit 
futex(0xb966a78, FUTEX_WAIT, 0, NULL 

और यहाँ की पीआईडी ​​पर strace उत्पादन मैं strace बच्चे की प्रक्रिया पर क्या कर पाया है उनसे छुटकारा पाएं। लेकिन मुझे यह जानकर उत्सुकता है कि वास्तव में इन प्रक्रियाओं को बंद करने के लिए क्या रोक रहा है, और यदि इसके बारे में कुछ करना संभव है।

सॉफ्टवेयर ढेर: अजगर 2.6.2, अजवाइन 2.4.6, CentOS 5.0

अद्यतन: CPU उपयोग लगभग 0% नीचे है। ये कार्य काफी सीपीयू गहन हैं, इसलिए यह पुष्टि करता है कि वर्तमान में कोई कार्य सक्रिय नहीं है।

उत्तर

3
docs से

:

कार्यकर्ता नहीं बंद विचारशील समय के बाद, क्योंकि एक अनंत लूप में फंस कार्यों के उदाहरण के लिए, तुम्हें मार संकेत का उपयोग कर सकते करेंगे, तो कार्यकर्ता समाप्त मजबूर करने के लिए , लेकिन ध्यान रखें कि वर्तमान में निष्पादन कार्य खो जाएंगे (जब तक कि कार्यों में acks_late विकल्प सेट नहीं है)।

इसके अलावा google groups से

:

celeryd बंद नहीं होगा जब तक सभी सक्रिय कार्य संसाधित किया गया है, जहां सक्रिय कार्य है कि (सभी नहीं सुरक्षित कार्य) पर शुरू किया गया है इसका मतलब है। आरक्षित संदेश जारी किए जाएंगे और कनेक्शन चैनल बंद होने के बाद पुनः वितरित किया जाएगा। सक्रिय कार्य वापस आने के बाद यह होता है। यदि आपके पास नहीं है - टाइम-सीमा सक्षम celeryd कभी भी आपके कार्यों को बंद करने पर कभी नहीं मार देगा, भले ही वे पूरा होने के लिए दिन ले लें।

+2

कोई सक्रिय कार्य नहीं है। स्टॉप सिग्नल जारी करने के समय चल रहे कार्यों को समाप्त कर दिया गया था। कतार की लंबाई वही रहती है। लॉग में कुछ भी नहीं हो रहा है। लेकिन प्रक्रियाएं अभी भी समाप्त नहीं हो रही हैं। जैसा कि मैंने कहा, मैं यह कर सकते हैं * मुद्दा एक को मारने और उनमें से छुटकारा पाने के *। लेकिन यह एक प्रभावी समाधान नहीं होगा। इस सॉफ़्टवेयर का विश्वसनीय रूप से उपयोग करने के लिए, मुझे इसे स्वचालित रूप से w/थोड़ा या कोई मैन्युअल हस्तक्षेप रोकने (और शुरू) करने में सक्षम होना चाहिए। – rubayeet

+1

इसके लिए एक अच्छा समाधान अजवाइन को खत्म करना है। पर्यवेक्षक एक उत्कृष्ट उम्मीदवार है। – hymloth

+1

मैं कार्यकर्ताओं daemonizing के लिए जेनेरिक init स्क्रिप्ट का उपयोग कर रहा हूँ: https://github.com/ask/celery/blob/master/contrib/generic-init.d/celeryd – rubayeet

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