supervisor + gunicorn 的坑

在尝试使用supervisor 来守护 gunicorn启动的web服务时,遇到了一个小坑,但是这个小坑却耽误了不少时间!

建议:

安装有3中方式:

1.系统安装,这样安装的是系统全局的,系统会使用python2来运行,所以弃用这个方式。

2. 全局pip, 使用pip3 install supervisor 可以安装,但是安装后需要进入到很深的全局包的目录才能运行,如 /usr/local/python3.xxx/xxx/xxx/。 比较繁琐 

3. 虚拟环境,在虚拟环境下使用pip install supervisor, 这样也需要使用绝对路径来运行,如 /home/xxx/code/venv/bin/supervisord

选择哪种看自己的使用习惯吧

配置

 建议将配置生成到supervisor默认使用的目录去, /etc/supervisor/

 使用 echo_supervisor_confi > /etc/supervisor/supervisord.conf

 然后在最后加上:

 [include]

  files = conf.d/*.conf

  再创建 conf.d 目录并在其下创建自己的自定义文件进行配置,这里就不贴配置了。

坑:

1. 由于supervisor监控的程序不能是daemon,但是之前gunicorn里面设置成了daemon, 所以导致supervisor认为刚启动的程序意外退出,然后便尝试重启,过了几次之后还是同样的结果就报错了,但实际上gunicorn的服务已经在运行了。将gunicorn配置的daemon改为非daemon就行了。

2. 由于gunicorn我是在虚拟环境下安装的,并且由于项目发布的方式是通过包的方式发布的,所以使用gunicorn来启动项目的时候很依赖虚拟环境,而在supervisor里面也暂时没想到有什么办法可以先激活虚拟环境然后在运行,所以就使用了一个bash脚本来激活虚拟环境并运行,然后通过supervisor 来运行bash脚本。 这样做的好处: 方便, 可以方便地通过设置环境变量来控制项目的运行。

 

常用命令:

1. 启动 supervisord -c /etc/supervisor/supervisor.conf

2. 停止 supervisorctl shutdown

3. 查看log, 先查看 /etc/supervisor/supervisor.conf 中[supervisord]段的log路径,我的是在/tmp里面,查看log可以快速定位到错误。

发布了19 篇原创文章 · 获赞 0 · 访问量 3510
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章