You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Heroku生产环境中让Django应用的Celery任务自动执行?

Django生产环境中让Celery Worker自动运行的方案

一、使用Systemd(主流Linux发行版推荐)

这是目前Linux系统最通用的进程管理方案,能确保Celery Worker开机自启、意外退出后自动重启。

  1. 创建Systemd服务文件
    在/etc/systemd/system/目录下新建celery.service文件,填入以下内容(根据你的实际环境替换占位符):
[Unit]
Description=Celery Worker for Django App
After=network.target redis.target  # 使用RabbitMQ则替换为rabbitmq-server.target

[Service]
User=your_username  # 运行Django的用户,如www-data或你的个人用户名
Group=your_group    # 对应用户组
WorkingDirectory=/path/to/your/django/project  # Django项目根目录
ExecStart=/path/to/venv/bin/celery -A appname worker -l info --pool=solo  # 替换虚拟环境路径和你的appname
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  1. 启用并启动服务
    执行以下命令完成配置:
  • 重新加载systemd配置:sudo systemctl daemon-reload
  • 设置开机自启:sudo systemctl enable celery.service
  • 启动服务:sudo systemctl start celery.service
  • 验证状态:sudo systemctl status celery.service

二、使用Supervisor

适合习惯用Supervisor管理多进程的场景,配置简单直观。

  1. 安装Supervisor
    Debian/Ubuntu系统:sudo apt install supervisor
    CentOS/RHEL系统:sudo yum install supervisor

  2. 创建Celery配置文件
    在/etc/supervisor/conf.d/目录下新建celery.conf,内容如下:

[program:celery]
command=/path/to/venv/bin/celery -A appname worker -l info --pool=solo
directory=/path/to/your/django/project
user=your_username
numprocs=1
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/celery/celery.log
stderr_logfile=/var/log/celery/celery_err.log

先创建日志目录并设置权限:sudo mkdir -p /var/log/celery && sudo chown your_username:your_group /var/log/celery

  1. 加载配置并启动
  • 更新配置:sudo supervisorctl reread
  • 加载新服务:sudo supervisorctl update
  • 启动Celery:sudo supervisorctl start celery
  • 查看状态:sudo supervisorctl status celery

三、Docker容器化部署场景

如果你的Django应用用Docker部署,可以直接在docker-compose.yml中定义Celery服务,实现随容器自动启动:

version: '3.8'
services:
  django_web:
    build: .
    command: gunicorn appname.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - .:/code
    depends_on:
      - redis
      - celery_worker

  celery_worker:
    build: .
    command: celery -A appname worker -l info --pool=solo
    volumes:
      - .:/code
    depends_on:
      - redis
    restart: always  # 容器退出后自动重启

执行docker-compose up -d启动所有服务,Celery Worker会随容器自动运行,且Docker服务开机自启时会一并启动。

关键注意事项

  • 确保你的消息中间件(Redis/RabbitMQ)也配置了开机自启,否则Celery Worker启动后无法连接Broker
  • 生产环境若不需要单进程模式(--pool=solo),可根据服务器CPU核心数调整进程数,例如--autoscale=4,2(最多4个工作进程,最少保留2个)
  • 定期清理Celery日志文件,避免占用过多磁盘空间

内容的提问来源于stack exchange,提问作者Roizy Kish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:01:12