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

生产环境下使用Supervisor运行Celery遇到的问题

解决Supervisor部署Celery时的权限、端口与版本冲突问题

看起来你在部署Celery的过程中踩了几个典型的坑——权限不足、Python版本不匹配、端口占用,咱们一步步来解决:

一、先搞定非root运行时的日志权限错误

你遇到的IOError: [Errno 13] Permission denied: '/var/log/supervisor/supervisord.log',本质是普通用户chiefir没有读写/var/log/supervisor/目录的权限。操作起来很简单:

  1. 先确认目录的所有者:
    ls -ld /var/log/supervisor/
    
  2. 如果是root独占,修改权限让你的用户能访问:
    sudo chown -R chiefir:chiefir /var/log/supervisor/
    sudo chmod -R 755 /var/log/supervisor/
    
  3. 顺便检查Celery的日志目录/home/chiefir/logs/celery/,确保它存在且有权限:
    mkdir -p /home/chiefir/logs/celery/
    chown -R chiefir:chiefir /home/chiefir/logs/celery/
    

二、解决Python版本不一致的问题

你的Django项目用Python3.5,但apt装的Supervisor默认绑定系统的Python2.7,这会导致Supervisor调用的Celery是Python2环境的,和你的项目依赖不兼容。解决办法是让Supervisor直接调用你Python3环境里的Celery:

  1. 先找到你Python3虚拟环境(或者全局Python3)里的Celery绝对路径:
    # 先激活你的项目虚拟环境
    source /home/chiefir/polo/Cosmo/venv/bin/activate
    which celery
    # 输出应该类似 /home/chiefir/polo/Cosmo/venv/bin/celery
    
  2. 修改两个Celery的Supervisor配置文件:
    • 打开/etc/supervisor/conf.d/mycelery.conf,把command改成绝对路径:
      command=/home/chiefir/polo/Cosmo/venv/bin/celery worker -A cosmetics_crawler_project --loglevel=INFO
      
    • 同样修改mycelerybeat.conf的command:
      command=/home/chiefir/polo/Cosmo/venv/bin/celery beat -A cosmetics_crawler_project --schedule /var/lib/celery/beat.db --loglevel=INFO
      
  3. 别忘了给Celery Beat的调度文件目录授权:
    sudo mkdir -p /var/lib/celery/
    sudo chown -R chiefir:chiefir /var/lib/celery/
    

三、处理root运行时的端口占用问题

当你用root启动supervisord时提示端口占用,是因为已经有一个supervisord进程在后台运行了。按以下步骤处理:

  1. 先排查当前运行的supervisord进程:
    ps aux | grep supervisord
    
  2. 停止现有进程:
    # 用supervisorctl正常关闭
    sudo supervisorctl shutdown
    # 如果不行就直接杀进程:sudo kill [进程ID]
    
  3. 用指定配置文件的方式启动(避免root运行的安全警告):
    sudo supervisord -c /etc/supervisord.conf
    

四、关于Supervisor的安装方式:不要混合apt和pip

apt安装的Supervisor绑定Python2.7是正常的(Debian/Ubuntu的系统包通常和系统Python绑定),不要同时用apt和pip安装,这会导致版本冲突和混乱。如果你想要Supervisor用Python3运行,可以彻底切换到pip安装:

  1. 先卸载apt版本的Supervisor:
    sudo apt remove --purge supervisor
    sudo apt autoremove
    
  2. 用Python3的pip安装:
    sudo pip3 install supervisor
    
  3. 生成新的配置文件:
    echo_supervisord_conf > /etc/supervisord.conf
    
  4. 修改配置文件的[include]部分,确保包含你的Celery配置:
    [include]
    files = /etc/supervisor/conf.d/*.conf
    
    这种方式下Supervisor会用Python3运行,和你的项目环境一致,但同样要处理日志、socket目录的权限问题(参考第一步的权限设置)。

最后验证部署

做完上面的步骤后,重新加载配置并检查状态:

# 重新读取配置
supervisorctl reread
# 更新进程
supervisorctl update
# 查看所有进程状态
supervisorctl status

如果还有问题,直接查看Celery的日志排查:

tail -f /home/chiefir/logs/celery/celery.log
tail -f /home/chiefir/logs/celery/celerybeat.log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:01:08