supervisor管理uwsgi运行的项目
环境 :ubuntu16.04+supervisor+uwsgi
通过查看supervisor的官方文档,发现supervisor目前只能运行在python2的版本中,但我们开发中常用的是Python3版本,还好我们项目一般建在虚拟环境中,于是就可以在外部python2的环境下使用supervisor管理虚拟环境内部的项目.
说明:
我使用的python版本管理工具是pyenv,非常方便,之前的博客也有介绍,想安装的可以看一下,哈哈哈.(https://blog.csdn.net/yingfeng_yang/article/details/82527321)
1.安装后台管理工具
将python切换到python2的版本
pyenv global 2.7.14
使用apt安装supervisor
sudo apt install supervisor
2.测试是否安装
sudo supervisorctl
出现supervisor>说明安装成功
-
supervisor管理uwsgi运行的项目
说明:
之前博客有提到使用uwsgi+django+nginx运行项目(https://blog.csdn.net/yingfeng_yang/article/details/82531258),不过有一个问题,uwsgi可以后台运行,不过启动与关闭很不方便,需要使用supervisor控制项目的开关.
1.创建项目的配置(我们使用apt安装的,配置文件一般在/etc/下)
cd /etc/supervisor/conf.d
配置文件的名字一般使用项目名.conf,我以todolist项目为例
sudo vim todolist.conf
------------------------------------------------------------------------ [program:todolist]
directory = /home/yfx/download/todolist
command =/home/yfx/.pyenv/versions/todolist/bin/uwsgi --http :8000 -- chdir=/home/yfx/download/todolist --module todolist.wsgi --threads
user = yfx
stdout_logfile = /home/yfx/download/todolist/log/uwsgi_stdout.log
stderr_logfile = /home/yfx/download/todolist/log/uwsgi_stderr.log
redirect_stderr = True
environment = PRODUCTION=1
-----------------------------------------------------------------------------
[program:todolist] 你项目的名字
directory = /home/yfx/download/todolist 项目跟目录的绝对路径
command 启动命令(注意:uwsgi应使用用虚拟环境中安装的uwsgi的绝对路径)
--http :8000 端口
--chdir=/home/yfx/download/todolist 项目根目录
user 用户名
stdout_logfile 输出日志
stderr_logfile 错误日志
redirect_stderr = True 开启错误日志输出
environment = PRODUCTION=1 使用生产环境
2.重新加载supervisor
sudo supervisorctl reload
3.启动supervisor
sudo supervisorctl
如果出现下面状态,说明管理项目成功
todolist RUNNING pid 97392, uptime 0:00:03
supervisor>
可以直接使用stop todolist关闭项目,start todolist 开启项目
supervisor> stop todolist
todolist: stopped
supervisor> start todolist
todolist: started
supervisor运行错误
退出太快错误
todolist BACKOFF Exited too quickly (process log may have details)
原因可能有一下几个:
1.使用了python2下的uwsgi直接运行的项目,我们的项目是用Python3写的,当然要用python3下安装的uwsgi
此原因错误检查方法:
将上述配置中的command的命名直接在python2的命令行下运行,如果,运行成功,可排除该原因造成的错误.
2.你的项目可能开了多进程
即在运行django项目是加了–processes 4
当你使用stop todolist关闭项目时,进程只关闭了一个,自然会出现异常
3.日志文件或项目根目录出错
存放日志文件的目录没有存在,或项目根目录路径出错都会出现这种问题