簡體   English   中英

Celery定期任務作為Python的守護進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM