Django项目Supervisor配置Celery启动报ENOENT无法拉起进程
报错根因
ENOENT是类UNIX系统的标准错误码,含义是指定路径的文件/目录不存在,对应到这个场景,就是Supervisor启动进程时,无法正常执行配置中声明的celery可执行文件,常见诱因有三类:
- 配置中填写的celery绝对路径和虚拟环境实际路径不匹配:比如虚拟环境迁移/重建过、路径拼写错误、celery根本没安装在当前虚拟环境内
- celery可执行文件、虚拟环境目录、日志目录的权限配置错误,指定的运行用户
tspl没有读取、执行、写入权限 - 配置中声明的日志输出目录不存在,进程启动时无法创建日志文件触发报错
修复步骤
- 校验celery路径与安装状态
切换到tspl用户,手动验证celery路径有效性:# 切换到运行用户 su - tspl # 进入项目目录 cd /home/tspl/python_project # 激活虚拟环境 source venv/bin/activate # 查看celery真实安装路径 which celery- 如果执行
which celery无输出,说明虚拟环境内未安装celery,直接执行pip install celery安装和Django、项目依赖匹配的celery版本即可 - 如果输出路径和配置中
/home/tspl/python_project/venv/bin/celery不一致,将配置中command字段的celery路径替换为which celery输出的真实路径 - 路径确认后,直接在当前shell执行配置中的完整启动命令:
/真实的/celery/路径 worker -A ondearn --loglevel=INFO,如果可以正常启动说明路径配置无误;如果报权限错误,执行以下命令修复权限:chmod +x /真实的/celery/路径 chown -R tspl:tspl /home/tspl/python_project/venv/
- 如果执行
- 校验日志目录配置
退出tspl用户回到root权限,执行命令创建日志目录并配置正确权限:mkdir -p /var/log/celery chown -R tspl:tspl /var/log/celery chmod 755 /var/log/celery - 重新加载Supervisor配置生效
所有配置修正完成后,依次执行以下命令让配置生效并验证运行状态:
看到supervisorctl reread supervisorctl update supervisorctl restart pythonprojectceleryd supervisorctl statuspythonprojectceleryd状态为RUNNING即说明修复完成。
补充:如果路径确认无误仍启动失败,可以将
command字段替换为显式激活虚拟环境的写法规避路径识别问题:command=/bin/bash -c 'source /home/tspl/python_project/venv/bin/activate && celery worker -A ondearn --loglevel=INFO'
内容的提问来源于stack exchange,提问作者Jay Maurya
相关产品推荐
相关产品推荐

