【问题标题】:Celery as a service with Django芹菜作为 Django 的服务
【发布时间】:2014-08-12 13:46:24
【问题描述】:

我正在尝试在我的 Django 项目中使用 Celery。和往常一样,我搜索了一些东西,阅读了一些关于相同内容的 SOF 问题,一些博客,当然还有官方文档。

但在 django 中将 celery 作为服务运行时非常令人困惑。我没有找到任何来源。

一个带有一个应用程序的简单 django 项目。在这个 App 文件夹中有一个文件 tasks.py 我的所有任务都在其中(现在它是一个任务)。

tasks.py

from celery.task.schedules import crontab  
from celery.decorators import periodic_task 

@periodic_task(run_every=crontab(minute="*/45"))
def mytask():
    #some stuff to do
    ...
    # return a value

这些是我的设置配置

settings.py

from __future__ import absolute_import
import djcelery

djcelery.setup_loader()

BROKER_URL = "amqp://user:user@localhost:5672/vhost"
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
CELERY_BEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

'djcelery' 添加到 INSTALLED_APS

现在如果我想运行 Celery worker 我必须在 screen/tmux 中使用这个命令

python manage.py celeryd --verbosity=2 --loglevel=DEBUG -B

python manage.py celeryd --verbosity=2 --loglevel=DEBUG &

我想知道它是否可以像我们运行 nginx、uwsgi、mysql 等一样作为服务运行。我不想在守护进程模式下运行。我该怎么做?

主要是我想做的sudo service celery restart/reload/stop/startlike

PS:正如我所说,我读过一些 SOF 线程,其中许多人说不要使用crontab。那我应该用什么?这是安全问题吗?

【问题讨论】:

  • 可以说,这属于超级用户。为什么不想在守护进程模式下运行?
  • Nancy 如果您想选择重新启动/启动/停止等,您是否看过主管或马戏团(mozilla)。这将允许您运行 python manage.py celeryd --verbosity=2 --loglevel=DEBUG 并且仍然可以轻松地为其调用重新启动。更多关于supervisord.orgcircus.readthedocs.org/en/0.11.1

标签: python django celery django-celery djcelery


【解决方案1】:

我建议阅读the documentations at http://celery.readthedocs.org/en/latest/tutorials/daemonizing.html,它提供了有关如何使其可作为服务运行的示例(适用于多种不同风格的服务)。请注意,当您执行 service blah start 时,将转到 init.d/blah 并运行该脚本。通常,这实际上确实将应用程序作为守护程序运行(如果有理由不想在守护程序模式下运行,请随意编辑)。另请注意,如果您使用的是 init.d(例如在 centos 6 或类似版本上;centos 7 移至 systemd IIRC),您还可以使用 chkconfig 配置您的 celery 服务以在重启时启动等。

【讨论】:

  • 守护程序教程实际上并不是一个教程,而是一堆示例配置,对它们的用例进行了一些非常模糊的解释。而且我也没有在那里找到我的用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2015-06-01
  • 2012-07-30
  • 2011-05-31
  • 2021-11-29
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多