supervisor的使用
时间:2019-09-24
本文章向大家介绍supervisor的使用,主要包括supervisor的使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
环境:
centOS7.5
python3与python2共存
目标:
让supervisor管理gunicorn,可以在gunicorn发生意外的情况下,会自动的重启。
1.supervisor的安装:
在系统级别的python环境下pip install supervisor
。(这里如果你用的是python3写的项目,也可以直接用pip安装启动supervisor,也就是python2,supervisor安装在3或者2,对你的项目没有任何影响)
2.在项目的根目录下创建一个文件叫做program_name_supervisor.conf,目录结构如下:
配置文件内容如下:
注意:
1.注意supervisord配置文件行头不要有空格
2.gunicorn的命令要在虚拟环境下运行(因为gunicorn安装在flaskApi这个虚拟环境中)
# supervisor的程序名字
[program:gotest] #program_name 该名称可以随意设置
# supervisor执行的命令
command=/root/.virtualenvs/flaskApi/bin/gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application
# 项目的目录
directory = /home/wangju/gitProject/flaskDemo
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0
# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=programdir/log/supervisord.log #这里你可能需要先创建log路径
# 输出的错误文件
stderr_logfile=programdir/log/supervisord.err#同上
[supervisord]
# log的级别
loglevel=info
# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001
# 登录supervisorctl的用户名和密码
username = admin
password = admin123456
[inet_http_server]
# supervisor的服务器
port = :9001
# 用户名和密码
username = admin
password = admin123456
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
安装:
yum
install
-y epel-release
yum
install
-y supervisor
验证安装成功:
#测试是否安装成功
echo_supervisord_conf
#创建配置文件
echo_supervisord_conf > /etc/supervisord.conf
通过supervisor启动gunicorn
(flaskApi) [root@67 flaskDemo]# supervisord -c gotest_supervisor.conf
确定supervisord 服务并设置为随机启动:
systemctl start supervisord.service && systemctl enable supervisord.service
浏览器输入url确认一下,gunicron已经把flask启动起来了,可以正常请求并返回内容
参考文档:
https://www.jianshu.com/p/d2da31b95a55
https://www.cnblogs.com/Dicky-Zhang/p/6171954.html
原文地址:https://www.cnblogs.com/kaerxifa/p/11577405.html
- 基于Session的身份窃取
- 使用 django-blog-zinnia 搭建个人博客
- 针对提权小神器Sherlock的分析与利用
- 关于 rsync 中: 和 :: 及 rysnc 和 ssh 认证协议的区别
- Java 反射机制详解
- shell 脚本多进程创建 mysql 测试数据
- Zookeeper 原理与实践
- 修改 mysql/oracle/bash/vimrc/cmd 提示符格式与颜色
- shell 学习笔记(17)
- 关于 xargs 参数被截断,tar 文件被覆盖的问题
- 一些sql用法例子【Updating】
- 关于腾讯的一道字符串匹配的面试题
- Sort Map by Value in Java
- java 利用反射模拟动态语言的 eval 函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- redis源码之SDS
- 01 . Tomcat简介及多实例部署
- 学练结合,快速掌握Kubernetes Service
- arraylist linkedlist vector
- Java的HashMap和HashTable
- 花木兰到底好看不,我用Python爬取了几万条评论!
- java方法重载
- java中super()和this()浅析
- 常见的 Spring 注解概览
- java中 this和super的区别
- Java常用API(ArrayList类)
- 关于多线程中抛异常的这个面试题我再说最后一次!
- 卧槽!居然有比Flask更好用更简单的框架
- Java8基础学习(一)- Founction接口
- java数组详解