supervisor是使用python开发的一个进程管工具

supervisor可以方便的监听、启动、停止、重启一个或多个进程。 并监控进程状态,异常退出时能自动重启,进程自动恢复的能力。

supervisor的组件

  • supervisord: 主进程名称,负责自行调用启动子程序,响应来自客户端的命令,重新启动崩溃或退出的子进程
  • supervisorctl: 命令行客户端,提供终端交互界面
  • Web Server: web用户界面,通过web界面查看和控制进程状态
  • XML-RPC Interface: 用于询问和控制管理器及其运行的程序的XML-RPC接口

安装

ubuntu系统中安装

apt-get install supervisor

centos系统中安装

yum install supervisor

使用 pip 或者 easy_install安装

sudo pip install supervisor
sudo easy_install supervisor

生成配置文件

echo_supervisord_conf | sudo tee /etc/supervisord.conf

或者

echo_supervisord_conf > /etc/supervisord.conf

/etc/supervisord.conf配置文件注解

  • [unix_http_server] 配置连接supervisord的sock的文件,包括sock文件路径,用户认证,默认开启,如关闭此项则[inet_http_server]项无法使用
  • [inet_http_server] 配置supervisor的web管理界面,配置监听的地址和端口,默认为关闭状态
  • [supervisord] 配置supervisor服务参数,例如日志,日志大小等等
  • [supervisorctl] 用于配置supervisorctl管理程序参数
  • [include] 包含其他配置文件,比如
1
2
[include]
files = /etc/supervisor.d/*.conf

使用supervisord管理程序

使用 python2.7 的 SimpleHTTPServer模块快速启动一个http server服务

创建配置文件 /etc/supervisor.d/simplehttpserver.conf 添加如下内容

1
2
[program:simplehttpserver]
command=/usr/bin/env python2.7 -m SimpleHTTPServer 20080

第一行指定当前配置的程序名称,定义的程序名不能重复

第二行程序运行命令(20080 为 http server端口号)

使用root权限启动服务

1
sudo supervisord

查看启动的http服务进程

1
ps -ef | grep python

使用supervisord管理nginx

nginx默认运行状态是后台运行程序。supervisord不能管理此类程序需要,需要修改nginx主配置文件。 在nginx配置中最外层加入daemon off;

创建配置文件 /etc/supervisor.d/nginx.conf 添加如下内容

1
2
[program:nginx]
command=/usr/sbin/nginx ;使用绝对路径

supervisordctl常用命令

supervisordctl -c /etc/supervisord.conf 指定配置文件,不指定时使用默认配置
supervisordctl status 查看进程运行状态
supervisordctl start 进程名 启动进程
supervisordctl stop 进程名 关闭进程
supervisordctl restart 进程名 重启进程
supervisordctl update 重新载入配置文件
supervisordctl shutdown 关闭supervisord
supervisordctl clear 进程名 清空进程日志
supervisordctl 进入到交互模式下。使用help查看所有命令。
supervisordctl start all
supervisordctl restart all
supervisordctl stop all
supervisordctl pid all
supervisordctl clear all
supervisordctl update all

参考