Ubuntu16.04下Supervisor 3.2.0异常退出状态255及Spawn错误求助
解决Supervisor工作进程Spawn错误(退出状态255)的排查步骤
我来帮你排查这个Supervisor启动失败的问题——退出状态255通常指向进程启动阶段的底层错误,不是单纯调整startretries参数能解决的,咱们一步步来定位问题:
先看Supervisor的详细日志
表面的Spawn错误信息太笼统,你需要查看日志文件获取具体失败原因:- 查看主日志:
tail -f /var/log/supervisor/supervisord.log - 查看对应工作进程的单独日志(如果配置了的话):
tail -f /var/log/supervisor/[你的worker名称].log
日志里通常会明确指出是命令路径错误、权限不足还是依赖缺失等具体问题。
- 查看主日志:
验证启动命令的正确性
Supervisor运行进程的环境和你平时用shell登录的环境不一样,一定要注意:- 确保命令用绝对路径,比如用
/usr/bin/python3 /home/your-project/worker.py而不是python3 worker.py - 手动在终端执行一遍配置里的完整命令,看是否能正常启动——如果手动都跑不起来,那问题肯定在进程本身,比如脚本语法错误、依赖包未安装。
- 确保命令用绝对路径,比如用
检查权限问题
很多时候是权限不足导致的:- 确认工作进程需要访问的文件、目录(比如日志目录、工作目录)对Supervisor运行的用户(通常是
supervisor或你配置的user)有读写权限 - 尝试用Supervisor的用户身份执行命令:
sudo -u supervisor [你的完整启动命令],如果执行失败,就能直接定位到权限问题。
- 确认工作进程需要访问的文件、目录(比如日志目录、工作目录)对Supervisor运行的用户(通常是
核对配置文件的正确性
即使你觉得和成功配置一致,也可能有细节遗漏:- 确保
startretries参数放在[program:xxx]的节下面,而不是全局配置里 - 检查是否配置了正确的
directory(工作目录),如果进程需要在特定目录下运行,这个参数不能少 - 示例正确的配置片段:
[program:my-worker] command=/usr/bin/python3 /home/your-project/worker.py directory=/home/your-project user=your-username startretries=2 autostart=true autorestart=true stdout_logfile=/var/log/supervisor/my-worker.log stderr_logfile=/var/log/supervisor/my-worker.err.log
- 确保
检查环境变量
Supervisor默认不会继承用户shell的环境变量,如果你的进程依赖特定的PATH、PYTHONPATH等变量,需要在配置里明确指定:environment=PATH="/usr/local/bin:/usr/bin",PYTHONPATH="/home/your-project/lib"
如果以上步骤都排查完还是没解决问题,建议把你的完整worker配置和日志里的具体错误信息贴出来,这样能更精准地定位问题。
内容的提问来源于stack exchange,提问作者eComEvo
相关产品推荐
相关产品推荐

