Supervisord(退出状态1;不期望)centos python
遇到了一个关于Supervisord的额外问题。
我使用的是Centos 6.5,系统自带了python 2.6,另外在/usr/local/bin安装了python 2.7。
这是supervisord的程序设置:
[program:inf_svr]
process_name=inf_svr%(process_num)s
directory=/opt/inf_api/
environment=USER=root,PYTHONPATH=/usr/local/bin/
command=python2.7 /opt/inf_api/inf_server.py --port=%(process_num)s
startsecs=2
user=root
autostart=true
autorestart=true
numprocs=4
numprocs_start=8080
stderr_logfile = /var/log/supervisord/tornado-stderr.log
stdout_logfile = /var/log/supervisord/tornado-stdout.log
我可以顺利运行inf_server.py:
python2.7 inf_server.py --port=8080
没有任何问题。我确保这些文件是可以执行的(之前就是因为这个问题)。
有什么想法吗?
更新:
我连一个简单的python脚本都无法启动,都会失败。
我先把旧程序注释掉,添加了一个新程序,然后写了:
command=python /opt/inf_api/test.py
这里的test.py只是往屏幕和文件里写点东西。结果失败了,退出状态是0。
所以我开始把python的路径加上(是通过'which python'找到的)。
environment=PYTHONPATH=/usr/bin
我试着把路径放在单引号里,试着在环境变量里加上USER=root,还试着加了:
directory=opt/inf_api/
又试着加了:
user=root
结果都是一样,退出状态还是0。
而且除了从supervisord的调试信息中看到的,日志文件里似乎没有任何内容。
我真的是无从下手了。
1 个回答
0
这其实是Supervisord在处理Python错误信息时出现的问题。简单来说,就是它没有捕捉到这些错误。我在用它来启动一个tornado应用,这个应用又会调用另一个Python文件,以便能启动多个tornado服务器实例。如果那个第二个Python应用里出现错误,Supervisord就不会捕捉到这些错误,也不会把它们记录到日志文件里。我尝试了各种方法,最后还是得自己用try: except:来捕捉错误,并把它们保存到我自己的日志文件里。这可能本来就是个好习惯,但真是绕了个大圈子才解决问题。