2015-05-05 7 views
11

बड़ी संख्या में नौकरियों को संसाधित करने के लिए, मैं पूरा करने के लिए कितना काम करने के आधार पर कतार श्रमिकों की एक चर संख्या चलाता हूं। मैं उस कार्य को पूरा करने के लिए आवश्यक श्रमिकों को चलाने की अपेक्षा नहीं करता हूं, जिसे हम उचित समझा जाता है।लार्वार्ट आर्टिसन सीएलआई सुरक्षित रूप से डेमॉन कतार श्रमिकों को रोकता है

फिलहाल, मैं परीक्षण प्रयोजनों के लिए 5 डेमॉन कतार श्रमिकों की शुरुआत करता हूं, हालांकि उत्पादन में यह संख्या 25 & 100 कर्मचारियों के बीच हो सकती है, संभवतः अधिक। मैं समझता हूं कि तैनाती करते समय, मुझे php artisan down का उपयोग करके रखरखाव मोड में ढांचे को पहले रखकर कतार श्रमिकों को रोकना होगा, क्योंकि --daemon ध्वज कार्यकर्ता शुरू होने पर ही फ्रेमवर्क को लोड करने का कारण बनता है, इसलिए नया कोड प्रभावित नहीं होगा कार्यकर्ता पुनरारंभ होने तक तैनात करें।

अगर मुझे किसी कारण से श्रमिकों को रोकने की ज़रूरत है, तो मैं php artisan down का उपयोग करके रखरखाव मोड में एप्लिकेशन डाल सकता हूं जो श्रमिकों को मरने के बाद उनके वर्तमान काम को संसाधित करने के बाद मर जाएगा (यदि वे एक काम कर रहे हैं)। हालांकि, ऐसे समय हो सकते हैं जहां मैं पूरे आवेदन को रखरखाव मोड में रखे बिना श्रमिकों को मारना चाहता हूं।

क्या श्रमिकों को इस तरह से रोकने का एक सुरक्षित तरीका है कि वे अपने वर्तमान काम को संसाधित करना जारी रखेंगे और फिर पूरा आवेदन रखरखाव मोड में रखे बिना मर जाएंगे?

अनिवार्य रूप से मैं क्या जरूरत है एक php artisan queue:stop, जो php artisan queue:restart तरह बर्ताव करता है, लेकिन एक बार काम किया है कार्यकर्ता को पुनः आरंभ नहीं करता है।

मैं ऐसा करने के लिए वहां जा रहा था php artisan queue:stop कमांड जो ऐसा करेगा, लेकिन ऐसा नहीं लगता है।

ps aux | grep php का उपयोग कर मैं श्रमिकों के लिए प्रक्रिया आईडी प्राप्त करने में सक्षम हूं, और मैं इस तरह की प्रक्रियाओं को मार सकता हूं, लेकिन मैं नौकरी पर काम करने के बीच में प्रक्रिया को मारना नहीं चाहता हूं।

धन्यवाद।

+2

इस प्रश्न को ढूंढने वाले किसी भी व्यक्ति के लिए। http://stackoverflow.com/questions/30060526/laravel-artisan-cli-safely-stop-daemon-queue-workers#comment48332831_30087630 का उत्तर है। php artisan queue: पुनरारंभ करना श्रमिकों को रोक देगा। "पुनरारंभ" नाम भ्रामक है। मजदूरों को बंद होने के बाद वास्तव में पुनरारंभ नहीं किया जाएगा। – Vigs

+0

सही है।"पुनरारंभ" केवल तभी होता है जब आपके पास निगरानी करने के लिए सुपरवाइजर सेटअप की तरह कुछ हो और उन्हें छोड़ने के बाद स्वचालित रूप से पुनरारंभ करें। (जो सामान्य सेटअप है।) –

उत्तर

2

हमने अपने आवेदन में ऐसा कुछ लागू किया है - लेकिन ऐसा कुछ ऐसा नहीं था जो लैरवेल में ही बनाया गया था। यदि आपको if-block में कोई अन्य शर्त जोड़कर this file संपादित करना होगा, तो यह stop फ़ंक्शन को कॉल करेगा। आप इसे Worker कक्षा में स्थिर वैरिएबल सेट करके भी कर सकते हैं, जब भी आप एक कस्टम कमांड चलाते हैं जिसे आप बनाना चाहते हैं (यानी php artisan queue:pause) या किसी परमाणु मूल्य की जांच करके (यानी इसे कुछ कैश में लालसा की तरह सेट करें) , memcached, एपीसी या यहां तक ​​कि MySQL, हालांकि इसका मतलब यह होगा कि इस समय के प्रत्येक चक्र के लिए आपके पास एक MySQL क्वेरी होगी) कि आप एक ही कस्टम कमांड का उपयोग कर सेट करते हैं।

+0

याहू मुझे डर था कि मुझे ऐसा कुछ करने वाला था। रेडिस या मेमकैच सेटअप प्राप्त करना होगा, झंडे की जांच करना एक प्रश्न का अपशिष्ट है, खासकर जब यह लूप में हर पुनरावृत्ति के लिए होता है, 25 - 100 श्रमिकों के साथ। सबसे अच्छा जवाब मुझे सोफर मिला है, तो +। उम्मीद है कि वे बाद के संस्करणों में ऐसा कुछ जोड़ देंगे। – Vigs

+0

हाँ, एपीसी/रेडिस/मेमकैच जाने का रास्ता होगा, एपीसी इस स्थिति में सबसे अच्छा है। – Nikko

2

--daemon का उपयोग करते समय ध्वज कर्मचारियों को कतार खाली होने पर छोड़ना नहीं चाहिए।

मुझे लगता है कि आप देख रहे हैं in the documentation for queues.

php artisan queue:restart आदेश को पुनः आरंभ करने श्रमिकों का संकेत देगा के बाद वे अपने वर्तमान काम किया जाता है।

+1

सही, मैं नहीं चाहता कि कतार खाली होने पर श्रमिकों को रुकना पड़े। मैं जो करना चाहता हूं वह कतार श्रमिकों को आदेश पर रोकता है, लेकिन इसे "सुरक्षित रूप से" करने के लिए, ताकि वे नौकरी संसाधित करने के बीच में नहीं रुक सकें। 'php artisan queue: restart', दुर्भाग्य से ऐसा नहीं करता है जो मुझे करने की ज़रूरत है। मैं श्रमिकों को पुनरारंभ नहीं करना चाहता हूं, मैं उन्हें "सुरक्षित रूप से" रोकने के लिए देख रहा हूं। प्रलेखन में कतार कार्यकर्ता को रोकने पर कोई जानकारी नहीं है, इसका केवल उल्लेख है कि आपको इसे "मैन्युअल रूप से" करना पड़ सकता है। – Vigs

+0

अनिवार्य रूप से मुझे जो चाहिए वह एक 'php artisan queue: stop' है, जो' php artisan queue: restart' जैसा व्यवहार करता है, लेकिन काम पूरा होने के बाद कार्यकर्ता को पुनरारंभ नहीं करता है। – Vigs

+7

'php artisan queue: work --daemon' के साथ टर्मिनल खोलें और किसी अन्य टर्मिनल में' php artisan queue: restart' चलाएं। पहला टर्मिनल वास्तव में थोड़ी देर के बाद बंद हो जाएगा। यह वास्तव में इसे पुनरारंभ नहीं करता है, यह एक अलग प्रक्रिया तक है जैसे http://supervisord.org/ को संभालने के लिए। – Deinumite

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