【问题标题】:Run a celery worker in the background在后台运行一个 celery worker
【发布时间】:2012-10-10 08:02:50
【问题描述】:

我正在像这样运行一个芹菜工人:

celery worker --app=portalmq --logfile=/tmp/portalmq.log --loglevel=INFO -E --pidfile=/tmp/portalmq.pid

现在我想在后台运行这个工人。我尝试了几件事,包括:

nohup celery worker --app=portalmq --logfile=/tmp/portal_mq.log --loglevel=INFO -E --pidfile=/tmp/portal_mq.pid >> /tmp/portal_mq.log 2>&1 </dev/null &

但它不起作用。我检查了 celery 文档,发现了这个:

特别是这条评论是相关的:

In production you will want to run the worker in the background as a daemon.
To do this you need to use the tools provided by your platform, or something
like supervisord (see Running the worker as a daemon for more information).

这对于在后台运行进程来说开销太大。我需要在我的服务器中安装 supervisord,并熟悉它。暂时不去。有没有一种简单的方式在后台运行 celery worker?

【问题讨论】:

  • 您还需要更多的东西吗? celery worker --app=portalmq --logfile=/tmp/portalmq.log --loglevel=INFO -E --pidfile=/tmp/portalmq.pid &
  • 正如我所说,这行不通。工人在初始化后就停止了。
  • & 在没有 nohup 的情况下为我工作。顺便说一句,您还可以在分离的屏幕中运行工作程序。我仍然认为您可以在更短的时间内配置主管(并且可以很好地部署 celery)
  • 你是对的,没有 nohup 它正在工作。我不知道以前出了什么问题,但我已经尝试过了。

标签: background celery


【解决方案1】:

supervisor 非常简单,只需要很少的工作即可完成设置,同样适用于 celery 与 supervisor 的组合。

设置它应该不会超过 10 分钟 :)

  1. 使用 apt-get 安装 supervisor

  2. 创建 /etc/supervisor/conf.d/celery.conf 配置文件

  3. 在 celery.conf 文件中粘贴一些内容

    [program:celery]
    directory = /my_project/
    command = /usr/bin/python manage.py celery worker
    
  4. 加上(如果你需要的话)一些可选的和有用的东西(用 dummy 值)

    user = celery_user
    group = celery_group
    stdout_logfile = /var/log/celeryd.log
    stderr_logfile = /var/log/celeryd.err
    autostart = true
    environment=PATH="/some/path/",FOO="bar"
    
  5. 重启主管(或做 supervisorctl reread; supervisorctl add 芹菜)

之后你会得到很好的 ctl 命令来管理 celery 进程:

supervisorctl start/restart/stop celery

supervisorctl tail [-f] celery [stderr]

【讨论】:

  • 谢谢。我会尽快尝试。
  • @Tommaso 我们应该在“directory = /my_project/”中写什么?
  • @simer Django 项目的路径(该命令需要在路径中包含 manage.py)
【解决方案2】:
celery worker -A app.celery --loglevel=info --detach

【讨论】:

  • 我想知道有没有办法重启 celery。
【解决方案3】:

我遇到了同样的问题,因为懒惰的解决方案是在命令末尾使用&amp;。 例如

celery worker -A <app>.celery --loglevel=info &  

【讨论】:

  • 不是最好的方法,在这里查看其他答案,但仍然可以像宣传的那样工作,所以我会投票赞成。 :-)
【解决方案4】:

对我来说,这个很有效,我在 django 中使用 celery

celery -A proj_name worker -l INFO --detach

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2015-07-14
    • 2017-11-14
    • 2020-01-21
    相关资源
    最近更新 更多