如何配置Celery随Nginx启动自动运行(systemd环境)
搞定Celery生产环境启动与systemd自动配置的问题
嘿,先给你明确个事儿:你本地用的celery -A proj -l info这个命令,绝对不适合生产环境。为啥?因为直接在命令行启动的话,终端一关进程就没了,进程崩溃了也不会自己重启,而且没法轻松管理多个worker来利用服务器的多核资源,完全扛不住生产场景的需求。
接下来咱们重点说怎么用systemd配置,让Celery能跟着Nginx一起启动(准确说是等Nginx启动后自动跑起来),而且能被系统好好管理:
第一步:创建systemd服务文件
去/etc/systemd/system/目录下新建一个celery.service文件,把下面的内容填进去,记得替换里面的占位符(比如你的项目路径、用户、虚拟环境路径这些):
[Unit] Description=Celery 任务队列服务 After=network.target nginx.service # 确保网络和Nginx都启动了再启动Celery [Service] Type=forking User=www-data # 换成你用来运行项目的用户,比如你的普通用户或者www-data Group=www-data # 对应的用户组 WorkingDirectory=/home/your-user/proj # 你的proj项目根目录绝对路径 Environment="PATH=/home/your-user/proj/venv/bin" # 如果用了虚拟环境,填虚拟环境的bin目录 ExecStart=/home/your-user/proj/venv/bin/celery multi start w2 -A proj -l info --pidfile=/var/run/celery/%n.pid --logfile=/var/log/celery/%n%I.log ExecStop=/home/your-user/proj/venv/bin/celery multi stopwait w2 -A proj --pidfile=/var/run/celery/%n.pid ExecReload=/home/your-user/proj/venv/bin/celery multi restart w2 -A proj -l info --pidfile=/var/run/celery/%n.pid --logfile=/var/log/celery/%n%I.log # 进程崩溃自动重启 Restart=always RestartSec=10 # 日志输出到系统日志 StandardOutput=journal+console StandardError=journal+console [Install] WantedBy=multi-user.target
这里我把worker数量设成了w2,也就是启动2个worker,你可以根据服务器的核数调整,比如4核就设w4。
第二步:准备必要的目录
Celery需要存pid文件和日志的地方,执行这几条命令创建并设置权限:
sudo mkdir -p /var/run/celery sudo mkdir -p /var/log/celery sudo chown www-data:www-data /var/run/celery /var/log/celery # 这里的用户组要和服务文件里的一致
第三步:启用并启动服务
让systemd识别新的服务文件,然后设置开机自启并启动:
sudo systemctl daemon-reload sudo systemctl enable celery.service sudo systemctl start celery.service
第四步:检查是否正常运行
用这条命令看服务状态:
sudo systemctl status celery.service
如果看到绿色的active (running),那就说明配置成功了!以后重启服务器或者Nginx重启的时候,Celery都会自动跟着启动。
最后给你几个生产环境的小建议:
- 日志级别:生产环境可以把
-l info改成-l warning或者-l error,减少不必要的日志输出 - worker数量:尽量和服务器CPU核数匹配,充分利用资源
- 监控:可以试试Celery Flower,能直观看到worker状态和任务执行情况,排查问题很方便
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

