【问题标题】:Celery, what is the recommended way to deamonise as a worker and a scheduler?Celery,作为工作人员和调度程序进行去魔化的推荐方法是什么?
【发布时间】:2015-07-01 20:54:42
【问题描述】:

我设置了 Django 和 Celery。我只为worker使用一个节点。

我想将它用作异步队列和调度程序。

我可以使用 -B 选项按如下方式启动任务,并且两者都可以。

celery worker start 127.0.0.1 --app=myapp.tasks -B 

但是,当我想守护进程时,不清楚如何在生产环境中执行此操作。我需要设置两个初始化脚本吗?

我已经尝试将 -B 选项添加到 init.d 脚本,但它似乎没有任何效果。文档不是很清楚。

【问题讨论】:

    标签: python django celery init.d


    【解决方案1】:

    我个人使用 Supervisord,它有一些不错的选项和可配置性。有示例 supervisord 配置文件here

    【讨论】:

    • 第二个 - 使用主管。您也可以在主管中设置您的芹菜花。
    【解决方案2】:

    实现这一点的几种方法: http://celery.readthedocs.org/en/latest/tutorials/daemonizing.html 1. Celery 发行版带有一个通用的初始化脚本,位于path-to-celery/celery-3.1.10/extra/generic-init.d/celeryd 这可以放在/etc/init.d/celeryd-name 中并使用分发中也存在的配置文件进行配置,如下所示

    # Names of nodes to start (space-separated)
    #CELERYD_NODES="my_application-node_1"
    # Where to chdir at start. This could be the root of a virtualenv.
    #CELERYD_CHDIR="/path/to/my_application"
    # How to call celeryd-multi
    #CELERYD_MULTI="$CELERYD_CHDIR/bin/celeryd-multi
    # Extra arguments
    #CELERYD_OPTS="--app=my_application.path.to.worker --time-limit=300 --concurrency=8 --loglevel=DEBUG"
    # Create log/pid dirs, if they don't already exist
    #CELERY_CREATE_DIRS=1
    
    # %n will be replaced with the nodename
    #CELERYD_LOG_FILE="/path/to/my_application/log/%n.log"
    #CELERYD_PID_FILE="/var/run/celery/%n.pid"
    
    # Workers run as an unprivileged user
    #CELERYD_USER=my_user
    #CELERYD_GROUP=my_group
    

    您可以在文件中添加以下用于 celery beat 配置的 celerybeat 元素

    # Where to chdir at start.
    CELERYBEAT_CHDIR="/opt/Myproject/"
    # Extra arguments to celerybeat
    CELERYBEAT_OPTS="--schedule=/var/run/celery/celerybeat-schedule"
    

    这个配置应该保存在(至少对于 centos)/etc/default/celeryd-config-name 查看 init 文件的确切位置。 现在您可以通过运行命令将 celery 作为守护进程运行 /etc/init.d/celeryd 星/重启/停止

    1. 使用supervisord。 如另一个答案中所述。 superviosord 配置文件也在分发路径-to-dist/celery-version/extra/supervisord 使用文件进行配置并使用 superviosrctl 将服务作为守护进程运行

    【讨论】:

    • 似乎有两个初始化脚本,一个用于 celerybeat,一个用于 celery daemon。我的问题是我需要同时使用两者,还是可以从 celeryd 脚本中执行相当于 -B 的操作?
    • 您需要这些初始化脚本之一。如果您使用的是 celerybeat,请使用 celerybeat 脚本。如果动机只是妖魔化工人,请使用名为 celeryd 的通用初始化脚本
    • 我想两者都用。我有异步任务以及计划任务。
    • 在这种情况下,使用 celerybeat 脚本并在配置文件中添加 celerybeat 配置元素,答案中链接的文档中提到了 celerybeat 配置元素
    • 我不使用 celerybeat,但我使用 init celerybeat 脚本对我的系统进行了快速测试,ps 显示了 beat 和 worker 实例,尝试运行它并告诉我。
    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2013-04-04
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多