- 环境安装
下载:
gunicorn-20.0.4.tar.gz
supervisor-4.2.1.tar.gz
tar -zxvf xxxxx
- 安装
进入加压目录下
python3 setup.py install
- 测试是否安装成功
检查安装包
pip3 list
或者 import gunicorn 与 import supervisor 进行测试
- supervisor 配置文件生成
在/etc下创建
mkdir supervisor
进入python安装目录 bin 下
echo_supervisord_conf > /etc/supervisor/supervisord.conf
- 创建conf.d目录
mkdir conf.d
- 修改配置文件信息
vim /etc/supervisor/supervisord.conf 修改最后两行内容如下 注意去掉下面两行前得;
[include]
files = /etc/supervisor/conf.d/*.conf
- 测试demo
创建 main_api.py
内容入下:
from flask import Flask
app = Flask(__name__)
@app.route('/api/demo',methods=['GET','POST'])
def test():
reeturn 'hello'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8080)
- 测试代码
python3 main_api.py
另开一个窗口
curl http://0.0.0.0:8080/api/demo
输出 hello
- supervisor 配置启动
;注意事项 gunicorn 若不是全局 则需要写道具体路径
[program:main_api_8765]
command=/usr/local/bin/gunicorn -b 0.0.0.0:8765 main_api:app -preload --timeout 120
directory=/opt/
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/opt/logs/stdout.log
stderr_logfil=/opt/logs/stderr.log
loginfo = info
************************** 配置说明 **********************************
; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令
directory=/opt/ ;接口文件所在的目录
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=tomcat ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
- 创建日志目录
在opt 目录下创建
mkdir logs
- 启动
supervisord -c supervisord.conf 通过配置文件启动supervisor
supervisorctl -c supervisord.conf status 察看supervisor的状态
supervisorctl -c supervisord.conf reload 重新载入 配置文件
supervisorctl -c supervisord.conf start [all]|[appname] 启动所有/指定supervisor管理的程序进程
supervisorctl -c supervisord.conf stop [all]|[appname] 关闭所有/指定supervisor管理的程序进程
若出现port 占用问题 请查找 netstat -anp| grep 端口号 找到进程号kill 掉即可
启动单个项目: 配置文件中 program后面对应进行名称
eg:
supervisorctl -c supervisord.conf start main_api_8765
- 进行状态查看
ps -ef | grep main_api_8765
- 进行接口测试
curl http://0.0.0.0:8765//api/demo
输出 hello
- 配置 开启自启动
vim /usr/lib/systemd/system/supervisord.service
注意事项: supervisorctl 与 supervisord 要根据自己的所在目录不可全抄
[Unit]
Description=Supervisor daemon
[Service]
# Type=forking # 次处注释 则需要再 /etc/supervisord.conf 中 nodaemon=false 改成true(自启动)
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
- 验证
systemctl enable supervisord
提示:
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
systemctl is-enabled supervisord
提示
enabled
表示设置成功
命令说明:
service supervisor stop 停止supervisor服务
service supervisor start 启动supervisor服务
supervisorctl status //查看所有进程的状态
supervisorctl stop 项目进程名 //停止 这个项目
supervisorctl start 项目进程名 //启动 这个项目
supervisorctl restart //重启
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序