2012-03-19 45 views
32

श्रमिकों में कोड अपडेट करने के लिए एक नया निर्माण जारी करते समय मैं अजवाइन श्रमिकों को गर्व से कैसे पुनरारंभ करूं?मैं अजवाइन श्रमिकों को गर्व से कैसे पुनरारंभ करूं?

संपादित करें: मैं ऐसा करने का इरादा रखता हूं।

  • कार्यकर्ता चल रहा है, शायद S3 के लिए एक 100 एमबी फ़ाइल को अपलोड करने
  • एक नया निर्माण आता है
  • कार्यकर्ता कोड में परिवर्तन
  • स्क्रिप्ट
  • बिल्ड आग कार्यकर्ता (रों)
  • शुरू होता है नया करने के लिए संकेत है नए कोड
  • कार्यकर्ताओं को मौजूदा नौकरी निकास को समाप्त करने के बाद संकेत प्राप्त हुआ।

उत्तर

42

एक कार्यकर्ता को पुन: प्रारंभ की नई सिफारिश की विधि यहाँ http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker

$ celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid 
$ celery multi restart 1 --pidfile=/var/run/celery/%n.pid 

http://ask.github.com/celery/userguide/workers.html#restarting-the-worker के अनुसार आप एक कार्यकर्ता एक HUP भेजने पुनः आरंभ कर सकते प्रलेखित है सिग्नल

ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | xargs kill -HUP 
+2

'sudo ps auxww से हटा दिया गया प्रतीत होता है। grep celeryd | grep -v "grep" | अजीब '{प्रिंट $ 2}' | sudo xargs kill -HUP' grep को बहिष्कृत करें :-) –

+0

@QuintinPar धन्यवाद, इसे – armonge

+2

उत्तर में जोड़कर आप grep celeryd को प्रतिस्थापित कर सकते हैं। grep -v "grep" grep [c] eleryd के साथ। बस केह रहा हू। – chanux

2

आप को देखना चाहिए अजवाइन के autoreloading

+5

यह प्रयोगात्मक प्रतीत होता है 'यह केवल एक प्रयोगात्मक विशेषता है जिसका उपयोग केवल विकास में उपयोग के लिए किया जाता है, उत्पादन में ऑटो-रीलोड का उपयोग करके निराश किया जाता है क्योंकि पाइथन में मॉड्यूल को पुनः लोड करने का व्यवहार अपरिभाषित है –

+0

यह भी ध्यान रखें कि इस पर मोड़ना ध्वज अनाथ प्रक्रियाओं को चल सकता है, जो इसके बदले में परिणाम बैकएंड अनुचित तरीके से काम कर रहा है – eviltnan

+1

ऑटोरेलोड विकल्प कोलेरी 4 –

0

लंबे समय तक चलने वाले कार्यों के साथ क्या होना चाहिए? मुझे यह इस तरह पसंद है: लंबे समय तक चलने वाले कार्यों को अपना काम करना चाहिए। उन्हें बाधित न करें, केवल नए कार्यों को नया कोड प्राप्त करना चाहिए।

किंतु इस समय संभव नहीं है: https://groups.google.com/d/msg/celery-users/uTalKMszT2Q/-MHleIY7WaIJ

11
celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid 
celery multi restart 1 --pidfile=/var/run/celery/%n.pid 

http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker

+0

उउघ ... यह कहता है कि "विकास * के लिए श्रमिकों का प्रबंधन करने का सबसे आसान तरीका सेलेरी मल्टी का उपयोग कर रहा है। ** उत्पादन तैनाती ** के लिए आपको * इनिट स्क्रिप्ट या अन्य प्रक्रिया पर्यवेक्षण प्रणाली * का उपयोग करना चाहिए।" यह जवाब उत्पादन में चलने के लिए लागू नहीं होता है! – webjunkie

+1

@webjunkie ओपी ने "उत्पाद परिनियोजन में" नहीं कहा था, इसलिए यह सुनिश्चित नहीं है कि अगर आप मूल प्रश्न में इसका उल्लेख नहीं किया गया तो आप इसे क्यों कम कर देंगे। – zengr

+0

उन्होंने यह भी नहीं कहा कि वह एक उदाहरण के लिए समाधान चाहता है परीक्षण पर्यावरण। बहुत से लोग और अधिक खतरनाक रूप से पढ़ने और उन समाधानों का उपयोग करने के लिए परेशान नहीं होंगे जो उनके लिए सही दिखाई देते हैं। तो यह केवल दोषों का उल्लेख करना उचित है और नोट्स को अनदेखा करने और आगे की सिफारिशों को अलग करने के लिए दस्तावेज़ों से कुछ कॉपी और पेस्ट नहीं करना है। – webjunkie

2

मैं बार-बार -HUP समाधान का परीक्षण किया है एक स्वचालित स्क्रिप्ट का उपयोग कर, लेकिन लगता है कि समय के बारे में 5%, कार्यकर्ता पुनरारंभ होने के बाद नई नौकरियों को चुनना बंद कर देता है।

एक और अधिक विश्वसनीय समाधान है:

stop <celery_service>
start <celery_service>

जो मैं बिना किसी समस्या के सैकड़ों बार इस्तेमाल किया है अब।

अजगर अंदर से, आप चला सकते हैं:

import subprocess 
service_name = 'celery_service' 
for command in ['stop', 'start']: 
    subprocess.check_call(command + ' ' + service_name, shell=True) 
4

आप kill मार्ग, बचाव के लिए pgrep जा रहे हैं:

kill -9 `pgrep -f celeryd` 

मन आप, यह एक लंबे समय से चल रहा है नहीं है कार्य और मुझे परवाह नहीं है कि यह क्रूरता से समाप्त हो जाता है। देव के दौरान बस नया कोड पुनः लोड करना। अगर यह अधिक संवेदनशील था तो मैं पुनरारंभ सेवा मार्ग पर जाऊंगा।

+3

(पीकेएल इसे क्लीनर तरीके से करता है) – orzel