2

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

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

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

任务.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

这些是我的设置配置

设置.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/start喜欢

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

4

1 回答 1

0

我建议阅读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 服务以在重新启动时启动等。

于 2014-08-12T14:04:13.410 回答