supervisor是一个在类UNIX操作系统下,以C/S架构来对进程进行管理的工具。
组成
- 服务端(Server)
supervisord
- 服务端(Server)
- 命令行客户端(Client)
supervisorctl
- 命令行客户端(Client)
- Web界面(Client)
- XML-RPC接口(Client)
详见XML-RPC API Documentation
- XML-RPC接口(Client)
配置
安装好后,可以执行命令echo_supervisord_conf
来获取默认的配置项,进行参考。
由于服务端和客户端使用的是同一个配置文件,所以在配置文件中包含它们各自的配置项,除此之外,还包含对应被supervisor管理的应用的配置。
配置文件一般命名为supervisord.conf,其中使用 ;
对配置项进行注释。
- supervisord配置
[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=true ; 是否在前台启动,默认是 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
; 包含其他的配置文件
;[include]
;files = relative/directory/*.ini ; 可以是 *.conf 或 *.ini
其中inet_http_server
需要时才配置。
nodamon
配置项决定是否以 daemon 的方式启动。
其他一般不变。
- supervisorctl配置
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 通过 UNIX socket 连接 supervisord,路径与 unix_http_server 部分的 file 一致
serverurl=http://127.0.0.1:9001 ; 通过 HTTP 的方式连接 supervisord
由于我希望使用Web界面,所以在这里给了两种连接方式。
- 应用配置
[program:cat]
command=/bin/cat
[program:redis-server]
command=/usr/local/bin/redis-server
priority=500
autostart=true
autorestart=true
startretries=3
exitcodes=0
stdout_logfile=/tmp/redis-server/server.log
stderr_logfile=/tmp/redis-server/server.err
stdout_logfile_maxbytes=5MB
stderr_logfile_maxbytes=5MB
stdout_logfile_backups=10
stderr_logfile_backups=10
这里我启动了两个应用(program),program冒号后为定义的标识,须唯一。
主要的是定义 command
,即执行的命令。若对启动目录有要求,则添加 directory
项。
proority小的应用启动时提前,杀死时滞后。反之则反。
命令
- 启动supervisord
supervisord -c supervisord.conf
查询是否运行:ps aux | grep supervisord
并没有提供停止功能。
- 启动supervisord
- 启动supervisorctl
supervisorctl -c supervisord.conf
以上两个命令均有自动寻找配置文件的功能,可以不加-c
。
执行之后,进入supervisorctl shell,如果不想进入,可以直接在supervisorctl后跟以下几个命令:status, stop xx, start xx, restart xx/all, reread, update, exit
。
其中reread
只是重新获取配置文件,update
才是依据配置文件对应用进行操作。
- 启动supervisorctl
- web界面
浏览设置的http serverurl
即可。
- web界面