मेरे स्टेजिंग सर्वर पर मेरे पास मेरा सेलेरी वर्कर (4.3.0) था और ब्रोकर के रूप में रैबिटएमक्यू के साथ सिस्टमड के माध्यम से डेमॉन के रूप में सेलेरी बीट के साथ चल रहा था। कुछ हफ्तों के लिए सब कुछ ठीक था बस 4 दिन पहले जब कोम्बू के माध्यम से सेलेरी और एएमक्यूपी के बीच किसी प्रकार की कनेक्शन त्रुटि हुई थी। [Errno 104] Connection reset by peer after started

मैं सर्वर लॉग पर ज्यादा ध्यान नहीं दे रहा था, क्योंकि परियोजना वाईपी चरण में है, हालांकि जब मैंने कोड के नवीनतम संस्करण को तैनात करने की कोशिश की, तो मुझे एहसास हुआ कि कार्यकर्ता के साथ कुछ गड़बड़ है।

मैंने इस मुद्दे के लिए गुगल किया और यही वह निकला: https://github.com/celery/celery/issues/4867

आसान उपाय यह था कि सेलेरी को 4.1.1 पर डाउनग्रेड किया जाए और भविष्य में स्थिर रिलीज में ठीक होने तक प्रतीक्षा करें।

मैंने अपने वेनव से सेलेरी, एमक्यूपी, बिलियर्ड और कोम्बू को हटा दिया, सेलेरी.4.1.1 स्थापित किया, जो उपयुक्त संस्करणों में उपरोक्त पैकेजों को स्थापित करता है।

सेलेरी और सेलेरीबीट की एटीएम सेवाएं सक्रिय हैं, सेलेरीबीट सेलेरी वर्कर को कार्य भेजता है, हालांकि सेलेरी लॉग मुझे त्रुटि संदेश दिखाता है (कृपया डाउनग्रेड के बाद सेलेरी का त्रुटि कोड देखें)। यह अजीब है, क्योंकि मैंने कार्य घोषणाओं या मेरी सेटिंग्स (जो यहां समस्या हो सकती है) में कुछ भी नहीं बदला है।

सबसे अजीब बात यह है कि अगर मैं सिस्टमड सेवाओं को बंद कर देता हूं और उन्हें प्रशंसा के साथ चलाता हूं:
celery -A celery_cfg:app worker -B --loglevel=DEBUG

सभी मौजूदा कार्यों को पूर्व की तरह आगे बढ़ाया जा रहा है। तो अजवाइन और सेलेरीबीट कॉन्फिगर होते हैं क्योंकि वे काम कर रहे हैं।

कुछ नुकीले तरीकों की मैंने कोशिश की:
1) सभी मॉड्यूल को बिना रिश्तेदार आयात के आयात करना सुनिश्चित करें।
2) अतीत में venv में गुम पैकेज के साथ समस्या का सामना करना पड़ा -> वे अप टू डेट हैं
3) सेलेरी/अजवाइन/गनिकोर्न/systemd/rabbitmq और स्वयं सर्वर को रीबूट किया
4) सिस्टमड सेवाओं में पथों की दो बार जाँच की (हालाँकि शायद मैं इसे लंबे समय तक डिबग कर रहा हूँ और मुझे टाइपो या कुछ और दिखाई नहीं दे रहा है)
5) विकासशील संस्करण 4.4.0rc2 के साथ प्रयास किया, (अजवाइन कार्यकर्ता खड़ा नहीं होगा) 6) इंस्टॉल किए गए ऐप्स में सभी आवश्यक ऐप्स होते हैं

अजवाइन संस्करण के डाउनग्रेड के बाद त्रुटि संदेश

    `2019-06-16 19:35:00,092: ERROR/MainProcess] Received unregistered task of type 'apps.mailing.tasks.execute_sending_system_mail'.
The message has been ignored and discarded.

Did you remember to import the module containing this task?
Or maybe you're using relative imports?

Please see
http://docs.celeryq.org/en/latest/internals/protocol.html
for more information.

The full contents of the message body was:
'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]' (77b)
Traceback (most recent call last):
 File "/home/user/apps/venv/loans/lib/python3.7/site-packages/celery/worker/consumer/consumer.py", line 557, in on_task_received
   strategy = strategies[type_]
KeyError: 'apps.mailing.tasks.execute_sending_system_mail'

अजवाइन सेवा सिस्टम कोड

Description=Celery Service
After=network.target

[Service]
Type=forking
User=<user>
Group=<user>
EnvironmentFile=/etc/default/celery
WorkingDirectory=/home/<user>/apps/loans
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
 -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
 --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
 --pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
 -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \

अजवाइन बीट सर्विस सिस्टम कोड

Description=Celery Beat Service
After=network.target

[Service]
Type=simple
User=user
Group=user
EnvironmentFile=/etc/default/celery
WorkingDirectory=/home/user/apps/loans
ExecStart=/bin/sh -c '${CELERY_BIN} beat  \
  -A ${CELERY_APP} --pidfile=${CELERYBEAT_PID_FILE} \
  --logfile=${CELERYBEAT_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL}'

[Install]
WantedBy=multi-user.target

चर के लिए कॉन्फ़ फ़ाइल

CELERYD_NODES="w1"

CELERY_BIN="/home/user/apps/venv/loans/bin/celery"

CELERY_APP="celery_cfg:app"

CELERYD_MULTI="multi"

CELERYD_OPTS=""

CELERYD_PID_FILE="/home/user/apps/pids/celery/%n.pid"
CELERYD_LOG_FILE="/home/user/apps/logs/celery/%n%I.log"
CELERYD_LOG_LEVEL="INFO"

CELERYBEAT_PID_FILE="/home/user/apps/pids/celery/beat.pid"
CELERYBEAT_LOG_FILE="/home/user/apps/logs/celery/beat.log"

सेलेरी_cfg फ़ाइल



app = Celery('loans_apps')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.set_default()

# <====CELERY BEAT PERIODIC TASKS ====>
app.conf.beat_schedule = {
    'execute_sending_system_mail': {
        'task': 'apps.mailing.tasks.execute_sending_system_mail',
        'schedule': crontab(minute='*/5'),
        'args': (),
    },
}


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

सेलेरी cfg वेरिएबल वाली सेटिंग में मामूली कटौती

BROKER_URL = 'amqp://localhost//',
CELERY_ENABLE_UTC = True

मुझे पता है कि मैं सिस्टमड के बिना अजवाइन और सेलेरीबीट सेट करने का प्रयास कर सकता हूं, हालांकि मैं इसे अंतिम उपाय समाधान के रूप में मानता हूं। मैं कॉन्फिडेंस को वैसे ही रखना चाहता हूं, भले ही मुझे कोई सुराग नहीं है कि वहां क्या गलत है।

संपादित करें गलती से और मेरे दोस्त द्वारा निर्देशित मुझे अभी पता चला है कि सेलेरी और सेलेरीबीट दोनों सेवाएं उपयोगकर्ता रूट पर ठीक काम कर रही हैं, जो स्पष्ट रूप से समाधान नहीं है लेकिन संभावित दोषों की संख्या को कम करता है

2
michael93pl 17 जून 2019, 19:56

1 उत्तर

सबसे बढ़िया उत्तर

प्रश्न को अनुत्तरित छोड़ना अशिष्टता होगी, भले ही उत्तर मेरी ओर से आता हो, यहाँ यह है:

अगर किसी को कभी भी इस तरह की समस्या का सामना करना पड़ेगा, तो मेरे द्वारा ऊपर बताए गए चरणों का पालन करने के बाद, निर्देशिकाओं की अनुमतियों की जांच करने का प्रयास करें, जो सेलेरी और सेलेरीबीट का उपयोग करता है - आपने उन्हें रूट अनुमतियों के साथ बनाया होगा, जो उल्लिखित समस्या के साथ समाप्त हो सकता है। भविष्य में सभी को शुभकामनाएँ!

1
michael93pl 18 जून 2019, 17:17