supervisor是一个制作守护进程的工具,用户可以在UNIX系统中监控、管理进程。常用于管理与某个用户或项目相关的进程。

安装

采用源码安装的方式,切换到3.1.3这个版本安装。


git clone https://github.com/Supervisor/supervisor.git
cd supervisor
git checkout 3.1.3
python setup.py install

生成默认的supervisor配置文件


echo_supervisord_conf > /etc/supervisord.conf

修改自定义配置

vim /etc/supervisord.conf

提供web界面访问需要设置 inet_http_server

需要配置一下supervisorctl的serverurl 这个地址必须匹配inet_http_server节点的port

另外要去掉include的注释 用include的方式来引入supervisor进程, 而不需要每次都去修改 /etc/supervisord.conf,files指定为/etc/supervisor/*.conf,只要在/etc/supervisor目录下.conf结尾的文件都需要被supervisor加载。

   
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123


[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket

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

示例

1、首先编写一段测试程序,这段代码是从网络上下载的,并非自己编写的。

vim test_http.py

  
import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
HandlerClass = SimpleHTTPRequestHandler
ServerClass = BaseHTTPServer.HTTPServer
Protocol = "HTTP/1.0"

if __name__ == "__main__":
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8000

server_address = ('0.0.0.0', port)
HandlerClass.protocol_version = Protocol
httpd = ServerClass(server_address, HandlerClass)

sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()

2、编写进程守护.conf文件

vim /etc/supervisor/test_http.conf

program:后面进程名称


[program:test_http]
command=python test_http.py 501 ; 被监控的进程路径
directory=/root/supervisor ; 执行前先cd到目录去
priority=1 ;数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启。。当然要选上了
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
stdout_logfile=/tmp/log/supervisor.log ;日志目录

启动并加载配置信息

不输出其他异常信息则表示启动并加载配置成功,接下来可以使用 supervisorctl 查看状态信息。看到一个进程名称为test_http。
可以在客户端远程访问这个supervisor网页控制台。curl http://127.0.0.1:9001 能看到网页信息就证明是OK的。
当然可以在远程浏览器访问http://xxxxx:9001 可以启动 停止 甚至是查看日志等功能。


supervisord -c /etc/supervisord.conf
supervisorctl status
test_http RUNNING pid 16013, uptime 0:14:22

supervisorctl 常用的命令有 start,restart,stop,stop all,reload等。

另外还有一个很重要的概览group

[group:test_gourp];定义分分组 test_gourp
programs=test_http ;分组中包含程序 test_http 多个需要使用,分隔。
priority=1
log_stderr=true
logfile_maxbytes=1MB