【问题标题】:How to run celery as daemon with normal celery command如何使用普通 celery 命令将 celery 作为守护进程运行
【发布时间】:2025-09-15 09:25:02
【问题描述】:

我有一个 django 应用程序,我正在使用 celery 任务在后台执行一些 csv 处理,所以我安装了 rabbitmq-server 就像 sudo apt-get install rabbitmq-server 一样,通过这个命令,rabbitmq-server 已安装并成功运行。

我在应用程序内的tasks.py 模块中有一些芹菜任务代码,并像下面那样运行芹菜

celery -A app.tasks worker --loglevel=info

工作正常并在后台成功执行 csv 文件,但现在我只想守护上述命令,我搜索了任何守护它的选项,但我没有找到任何要传递的参数,如 -D守护上述命令。那么无论如何我可以守护上述命令并使芹菜运行吗?

【问题讨论】:

  • 我使用 supervisorctl 来实现这个

标签: python django celery celery-task celeryd


【解决方案1】:

我认为您正在寻找--detach 选项。 [1]

但建议您使用类似 systemd 的东西。 celery 文档有一整页关于这个主题。 [2]

[1]http://celery.readthedocs.org/en/latest/reference/celery.bin.base.html#daemon-options

[2]http://celery.readthedocs.org/en/latest/tutorials/daemonizing.html

【讨论】:

    【解决方案2】:

    supervisorctl 将是一个更好的选择。

    安装:sudo apt-get install supervisor

    supervisor的主要配置文件在这里:/etc/supervisor/supervisord.conf

    运行$vim /etc/supervisor/supervisord.conf 进行检查。查看文件,在底部,您会注意到:

    [include]
    files = /etc/supervisor/conf.d/*.conf
    

    这基本上意味着您的项目的配置文件可以存储在这里/etc/supervisor/conf.d/,它们将被自动包含。

    运行:sudo vim /etc/supervisor/conf.d/myapp.conf。您的配置可能如下所示:

    [program:myapp]
    command={{ your celery commands without curly braces }}
    directory=/directory/to/myapp
    autostart=true
    autorestart=true
    stderr_logfile=/var/log/myapp.err.log
    stdout_logfile=/var/log/myapp.out.log
    

    重启服务:$sudo service supervisor restart

    更新任何 *.conf 文件后重新读取:$sudo supervisorctl reread

    记录更新:$sudo supervisorctl update

    检查特定 *.conf 的状态:sudo supervisorctl status myapp

    检查您的日志文件以获取更多状态数据。

    【讨论】:

      最近更新 更多