python进程管理工具supervisor的安装与使用教程


Posted in Python onSeptember 05, 2017

前言

在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便。如果有一个工具能够实现每台机器上多个进程的简单高效中心化管理将是非常方便的。于是Supervisord工具应运而生。与Supervisord类似的工具包括monit, daemontools和runit。下面话不多说了,来一起看看详细的介绍吧。

安装

Supervisord是运行在Python环境下的服务监控程序,所以在安装supervisord之前必须有python环境。

yum install python-setuptools
easy_install supervisor

如果安装成功,键入: echo_supervisord_conf,会显示一个superviscord_conf 的配置模板。

这里使用重定向运算符将配置文件定向到/etc路径下(方便管理)

echo_supervisord_conf>/etc/supervisord.conf

配置文件详解

[unix_http_server]
file=/tmp/supervisor.sock ; UNIX socket 文件,supervisorctl 会使用
;chmod=0700 ; socket 文件的 mode,默认是 0700
;chown=nobody:nogroup ; socket 文件的 owner,格式: uid:gid
;[inet_http_server] ; HTTP 服务器,提供 web 管理界面
;port=127.0.0.1:9001 ; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性
;username=user ; 登录管理后台的用户名
;password=123 ; 登录管理后台的密码
[supervisord]
logfile=/tmp/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ; 日志文件大小,超出会 rotate,默认 50MB
logfile_backups=10 ; 日志文件保留备份数量默认 10
loglevel=info ; 日志级别,默认 info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; pid 文件
nodaemon=false ; 是否在前台启动,默认是 false,即以 daemon 的方式启动
minfds=1024 ; 可以打开的文件描述符的最小值,默认 1024
minprocs=200 ; 可以打开的进程数的最小值,默认 200
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 通过 UNIX socket 连接 supervisord,路径与 unix_http_server 部分的 file 一致
;serverurl=http://127.0.0.1:9001 ; 通过 HTTP 的方式连接 supervisord
; 包含其他的配置文件
[include]
files = relative/directory/*.ini ; 可以是 *.conf 或 *.ini

进程Program配置

[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere

将进程配置添加到supervisord.conf文件中

推荐将各个进程配置放到单独的文件中,然后通过[include]配置项引用

[include]
files = /etc/supervisor/*.conf

supervisor服务启动

运行命令

supervisord -c /etc/supervisord.conf

supervisor服务客户端管理

可以使用supervisord的命令行客户端管理工具supervisorctl,来管理进程。

supervisorctl status
supervisorctl stop usercenter
supervisorctl start usercenter
supervisorctl restart usercenter
supervisorctl reread
supervisorctl update

supervisor web管理界面

;[inet_http_server] ; HTTP 服务器,提供 web 管理界面
;port=127.0.0.1:9001 ; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性
;username=user ; 登录管理后台的用户名
;password=123 ; 登录管理后台的密码

在浏览器中输入http://127.0.0.1:9001,即可进入web管理界面

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python常用随机数与随机字符串方法实例
Apr 09 Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
Python实现DDos攻击实例详解
Feb 02 Python
树莓派用python中的OpenCV输出USB摄像头画面
Jun 22 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Python如何把十进制数转换成ip地址
May 25 Python
python中怎么表示空值
Jun 19 Python
浅谈python出错时traceback的解读
Jul 15 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
基于Django模板中的数字自增(详解)
Sep 05 #Python
用python结合jieba和wordcloud实现词云效果
Sep 05 #Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 #Python
python 生成器协程运算实例
Sep 04 #Python
python 文件操作删除某行的实例
Sep 04 #Python
Django数据库操作的实例(增删改查)
Sep 04 #Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 #Python
You might like
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
python绘制条形图方法代码详解
2017/12/19 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
django 模版关闭转义方式
2020/05/14 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
编辑找工作求职信范文
2013/12/16 职场文书
初中校园之声广播稿
2014/01/15 职场文书
师范生自我鉴定
2014/03/20 职场文书
学校安全责任书
2014/04/14 职场文书
小学见习报告
2014/10/31 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS