一、简介
Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来在 UNIX-like 系统(不支持 Windows)下启动、重启(自动重启程序)、关闭进程(不仅仅是 Python 进程)
Supervisor 是一个 C/S 模型的程序,supervisord 是 server 端,supervisorctl 是 client 端

supervisord的出现,可以用来管理后台运行的程序。通过supervisorctl客户端来控制supervisord守护进程服务,真正进行进程监听的是supervisorctl客户端,而运行supervisor服务时是需要制定相应的supervisor配置文件的。
Supervisord工具的整个使用流程:
1、首先通过echo_supervisord_conf 生成配置文件模板
2、然后你根据自己的需求进行修改,接着就使用相应的命令来使用supervisorctl客户端
3、而supervisorctl客户端会将对应的信息传递给supervisord守护进程服务,让supervisord守护进程服务进行进程守护。

二、目前Supervisord存在缺陷
1、Supervisor管理的进程必须由supervisord启动,即已启动的程序是无法使用supervisord进行管理的。
2、Supervisor要求管理的程序是非后台式的程序(not daemon program),因为Supervisord会自动帮你将要管理的进程转为后台进程,如果原本就是后台进程就存在问题,比如要使用Supervisor管理nginx,nginx就需要在配置文件中添加daemon off 让nginx以非后台运行形式启动。
3、Supervisor不支持windows,只支持类UNIX系统,如Centos、Ubuntu、MacOS

**一个类似的监控工具:Monit

Monit可以对系统状态、进程、文件、目录和设备进行监控,适用于Linux平台,可以自动重启已挂掉的程序,比较适合监控系统的关键进程和资源,如nginx、apache、mysql和cpu占有率等。

三、Supervisor特征
1、可以准确的控制子进程 通常,在Unix进程上,比较难获得准确的进程上下文状态,Pidfiles经常不准确(?)(Pidfiles是linxu中用来进行进程守护的一种机制,简单而言就是要守护的进程PID进入在file中,定时检查),Supervisor会将要监控的进程作为子进程启动,这样Supervisor的父进程就始终知道子进程正在的上下文状态,同时可以很方便的控制该子进程(这就是为什么Supervisor要求要它管理的进程必须由它来启动,而不能管理已启动的进程)
2、Delegation机制 Delegation代表团机制,可以通过配置允许不同权限的用户对相应的监控进程进行启动与管理
3、优先级流程组 Supervisor可以为监控进程设置优先级,以不同的顺序启动进行,当然也可以直接 start all或 restart all
4、高效性 Supervisor 的主进程会通过fork/exec的方式启动被监控的进程,但其实不会对子进程进行守护,当被监控进程终止时,操作系统会主动立刻的向Supervisor发出信号,Supervisord接收到信号后,会执行相应的重启逻辑,这与某些依赖于PID文件和定期轮训重启终止进程的方法不同,更为高效。
5、高拓展 Supervisor内有简单的事件通知协议,可以通过任意语言来实现一个监听器来监听事件通知,它还有XML-RPC接口用于扩展

四、Supervisord安装和配置
1、在Centos系统下安装Supervisord

yum install python-setuptools
easy_install supervisor

2、创建配置文件

echo_supervisord_conf > /etc/supervisord.conf

3、修改配置文件

vim /etc/supervisord.conf


配置说明:
command 要执行的命令
priority 优先级
numprocs 启动几个进程
autostart supervisor启动的时候是否随着同时启动
autorestart 当程序over的时候,这个program会自动重启,一定要选上

4、配置文件解析:
位置:etc/supervisord.conf

#指定了socket file的位置
[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid#用于启动一个含有前端的服务,可以从Web页面中管理服务。其中,port用于设置访问地址,username和password用于设置授权认证。
;[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,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
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信号,包括子进程# 对事件进行的管理
;[eventlistener:theeventlistenername]#对任务组的管理 ,包含其它配置文件
;[group:thegroupname]
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions
;priority=999                  ; the relative start priority (default 999)[include]
files = supervisord.d/*.ini    ;可以指定一个或多个以.ini结束的配置文件

5、启动时指定配置文件

supervisord -c /etc/supervisord.conf

6、进入ctl模式

supervisorctl

7、supervisorctl中的简单命令

supervosorctl help 查看命令帮助
supervosorctl status  查看状态
supervosorctl stop  XXX  停止某一个进程
supervosorctl start  XXX  启动某个进程
supervosorctl restart  XXX  重启某个进程
supervosorctl reload  载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervosorctl update 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

至此,supervisord服务就已经配置完成!

进程管理工具——Supervisord简介及安装相关推荐

  1. NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略

    NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...

  2. Python之pip:pip包管理工具的简介、安装、使用方法之详细攻略

    Python之pip:pip包管理工具的简介.安装.使用方法之详细攻略 目录 pip的简介 pip的安装 1.测试pip是否已安装 T1.代码查询 T2.自行查询

  3. linux服务与进程管理sup,linux下进程管理工具-supervisord

    一 简介 supervisord是linux下的一个优秀的进程管理工具,通过supervisord可以方便管理和应用linux系统下服务进程过多的问题,其支持服务异常退出自动重启,通过浏览器管理控制相 ...

  4. 进程管理工具-Supervisord +CeSi

    Supervisor 简介 Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来在 UNIX-like 系统(不支持 Windows)下启动.重启(自动重启程序).关闭进程 ...

  5. linux下进程管理工具-supervisord

    一 简介 supervisord是linux下的一个优秀的进程管理工具,通过supervisord可以方便管理和应用linux系统下服务进程过多的问题,其支持服务异常退出自动重启,通过浏览器管理控制相 ...

  6. web linux进程管理,详解Supervisor安装与配置(Linux/Unix进程管理工具)

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...

  7. Linux进程管理工具_Supervisor的安装与配置

    Linux/Unix进程管理工具_Supervisor的安装与配置 Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是L ...

  8. Supervisor安装与配置(Linux/Unix进程管理工具)

    原文链接:http://blog.csdn.net/xyang81/article/details/51555473 Supervisor(http://supervisord.org/)是用Pyth ...

  9. Python Supervisord 进程管理工具

    Supervisord,用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效. 环境 centos python2.6.6 安装  wget http://pypi.python ...

最新文章

  1. 图像滤镜艺术---(Nostalgla Filter)老照片滤镜
  2. 内容激活码jsp发送email
  3. 以太坊智能合约生命周期(Ethereum smart contracts lifecycle)
  4. 软件设计模式—面向接口编程
  5. android可点击的列表,如何在Android的可扩展列表视图中的子点击...
  6. Bootstrap 响应式设计
  7. 透明怎么弄_玻璃球里的花纹是怎么弄进去的?谜终于解开了!
  8. [转载] json字符串转list_Python入门进阶教程JSON操作
  9. java 反射覆盖方法,java – 确定一个方法是否覆盖使用反射的另一个?
  10. OS + RedHat 6.3 x64 / sshd X11 /
  11. MFC如何正常关闭一个程序
  12. 从网站抓取数据的3种最佳方法
  13. TTL电平和CMOS电平的区别,详细分析他们的区别
  14. 数据库建模工具ER Studio 8 安装破解总结
  15. Web Polygraph 安装
  16. 微信小程序,实现一个简易的新闻网
  17. 中国IT产业人才分布地图
  18. 磨刀不误砍柴工——模板方法模式
  19. linux mysql 超级用户_Linux下MySQL忘记超级用户口令的解决办法linux操作系统 -电脑资料...
  20. CSS高度自适应问题

热门文章

  1. python--计算圆的周长与面积
  2. 【股民故事】回忆:一个小散户的历程
  3. 苹果开发者账号申请(个人/公司/企业)
  4. 限时免费学习课程内容:亚马逊云科技云概念、亚马逊云科技服务、安全性、架构。
  5. 武汉大学计算机学院易碧波,研究生工作部
  6. USB驱动程序(基础)
  7. GNOME3输入法图标
  8. 老男孩-Python之路,Day3 - Python基础3
  9. day20Java-Thread-多线程实现方式1继承Thread类
  10. 会计凭证抬头文本增强的问题