Celery beat不会定期执行任务

时间:2016-04-14 18:10:23

标签: python django celery django-celery

我有任务

class BasecrmSync(PeriodicTask):
run_every = schedules.crontab(minute='*/1')

def run(self, **kwargs):
    bc = basecrm.Client(access_token=settings.BASECRM_AUTH_TOKEN)
    sync = basecrm.Sync(client=bc, device_uuid=settings.BASECRM_DEVICE_UUID)
    sync.fetch(synchronize)

使用数据库代理的芹菜配置

CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
BROKER_URL = 'django://'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

我跑

celery -A renuval_api worker -B --loglevel=debug

但它没有运行任务...... 我也尝试过

python3 manage.py celery worker --loglevel=DEBUG  -E -B -c 1 --settings=renuval_api.settings.local

但是它使用了amqp传输,我无法理解为什么。

1 个答案:

答案 0 :(得分:1)

我为节拍功能本身运行一个单独的过程。否则,我永远无法获得定期任务。当然,我可能完全错了,但它对我有用并且已经有一段时间了。

例如,我让芹菜工作者在一个过程中运行其应用程序:

celery worker --app=celeryapp:app -l info --logfile="/var/log/celery/worker.log"

我的节拍在自己的过程中指向同一个应用程序:

celery --app=celeryapp:app beat

他们指向相同的应用程序和设置,并击败了工人选择并完成的任务。这个应用程序与我的Django应用程序位于相同的代码树中,但是这些进程没有在Django中运行。也许你可以运行类似的东西:

python3 manage.py celery beat --loglevel=DEBUG  -E -B -c 1 --settings=renuval_api.settings.local

我希望有所帮助。