15

我正在运行这样的芹菜工人:

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,并熟悉它。暂时不去。有没有一种在后台运行芹菜工人的简单方法?

4

4 回答 4

31

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

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

  1. 使用 apt-get 安装主管

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

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

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

    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 celery)

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

supervisorctl start/restart/stop celery

supervisorctl tail [-f] celery [stderr]
于 2012-10-10T10:48:06.957 回答
16
celery worker -A app.celery --loglevel=info --detach
于 2020-07-16T16:31:15.837 回答
3

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

celery worker -A <app>.celery --loglevel=info &  
于 2020-06-18T15:39:33.080 回答
1

对我来说,这个有用,我用 celery 和 django

celery -A proj_name worker -l INFO --detach
于 2021-06-23T05:24:35.363 回答