[英]Celery Periodic Task as a Daemon with Python
我想在Ubuntu實例上設置一個簡單的python應用程序作為芹菜任務。 我已經按照Celery文檔中的說明設置了結構:
proj/__init__.py
/celery.py
/tasks.py
這工作正常,我可以使用以下命令從../proj運行定期任務:
celery worker -B --app=proj
然后,我復制了celeryd和celerybeat文件並編輯了默認文件。
但是,當我啟動守護程序時,celeryd運行,但似乎找不到celery.py配置,並記錄了連接被拒絕的錯誤。
我認為它必須與以下路徑有關:
#/etc/default/celeryd:
# Where to chdir at start.
CELERYD_CHDIR="/home/user/"
CELERY_CONFIG_MODULE="/home/user/proj"
除了更改CELERYD_USER之外,我還保留了文檔中指定的其他設置。
我覺得我也應該在配置中使用--app,也許還要指定我的python環境,但是我不確定在哪里或如何運行(我沒有在運行虛擬環境)。
我現在正為同樣的事情而苦苦掙扎。 這是我的看法:
通信應用程序的兩端執行任務,而工作程序執行任務。
工人不需要知道應用程序! 對於worker部分,僅知道celeryconfig就足夠了。 您可以使用celery worker --config = mypackage.celeryconfig傳遞它。 工作人員將使用BROKER_URL連接到隊列。 請記住在此處聲明CELERY_IMPORTS,以便工作人員知道在哪里查找任務定義。
客戶端應用程序必須知道將請求發送到哪里。 因此,必須使用傳遞配置文件的方法之一來傳遞相同的配置。 我選了一個:
from __future__ import absolute_import
from celery import Celery
celery = Celery()
import backend.async.celeryconfig
celery.config_from_object(backend.async.celeryconfig)
當我不使用守護進程運行該設置時,它對我有用,但是出於某種原因,守護進程會忽略我的CELERY_CONFIG_MODULE設置。
更新:
在/etc/init.d/celeryd腳本中的任何地方都不會使用CELERY_CONFIG_MODULE !
相反,我將其放在CELERYD_OPTS中,它就像一個符咒。
CELERYD_OPTS="--config=backend.async.celeryconfig"
另一件事是,在celeryd腳本中,VIRTUAL_ENV變量也被忽略。 在另一個celerybeat腳本上激活虛擬環境,所以我建議的配置是:
CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule --config=backend.async.celeryconfig"
VIRTUAL_ENV="/path/to/.virtualenvs/your_env"
# Python interpreter from environment.
ENV_PYTHON="$VIRTUAL_ENV/bin/python"
# How to call "celeryd-multi"
CELERYD_MULTI="$VIRTUAL_ENV/bin/celeryd-multi"
#CELERYD="$VIRTUAL_ENV/celeryd"
# How to call "celeryctl"
CELERYCTL="$VIRTUAL_ENV/bin/celeryctl"
# How to call "celerybeat"
CELERYBEAT="$VIRTUAL_ENV/bin/celerybeat"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.