Supervisor部署Python脚本时venv虚拟环境激活异常排查求助
Supervisor运行Python虚拟环境脚本依赖缺失问题解决
问题场景
使用Supervisor 4.1.0运行需venv虚拟环境的Python脚本,手动运行正常,但Supervisor启动后出现单个依赖缺失:
- Supervisor配置文件:
[program:counter] directory=/home/dell/vito/counter command=bash /home/dell/vito/counter/venv/bin/python3 /home/dell/vito/counter/main.py autostart=true autorestart=true stopasgroup=true killasgroup=true stderr_logfile=/var/log/counter/counter.err.log stdout_logfile=/var/log/counter/counter.out.log user=dell
- 错误日志(counter.err.log):
TERM environment variable not set. /bin/sh: 1: pip: not found
- 问题根源日志(counter.out.log):
Ultralytics YOLOv8.2.22 🚀 Python-3.8.10 torch-2.0.0+nv23.05 CUDA:0 (Orin, 7337MiB) Loading /home/avacon/vito/counter/models/best320n_29052024.engine for TensorRT inference... requirements: Ultralytics requirement ['nvidia-tensorrt'] not found, attempting AutoUpdate...
直接改用python3 main.py会出现ultralytics模块未找到,推测虚拟环境未完全激活。
解决方法
方法1:提前手动安装缺失依赖
进入虚拟环境安装nvidia-tensorrt,避免Ultralytics自动更新时触发pip调用问题:
source /home/dell/vito/counter/venv/bin/activate pip install nvidia-tensorrt deactivate
安装完成后重启Supervisor进程:
sudo supervisorctl restart counter
方法2:修改Supervisor命令,完整激活虚拟环境
将配置中的command改为先激活虚拟环境再执行脚本,确保所有环境变量加载:
command=bash -c "source /home/dell/vito/counter/venv/bin/activate && python main.py"
更新配置并重启:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart counter
方法3:在Supervisor配置中补充环境变量
在[program:counter]块中添加环境变量设置,指定TERM和PATH,确保虚拟环境的pip被优先调用:
environment=TERM=xterm, PATH="/home/dell/vito/counter/venv/bin:%(ENV_PATH)s"
更新配置并重启服务:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart counter
问题原因说明
直接调用虚拟环境的python解释器时,虽然使用了虚拟环境的Python,但Supervisor的默认PATH不包含虚拟环境的bin目录,导致Ultralytics自动更新时调用的pip命令找不到;同时TERM环境变量缺失会影响部分命令的正常执行。
内容的提问来源于stack exchange,提问作者vgenovpy
相关产品推荐
相关产品推荐

