Supervisor,是一个进程控制系统,是一个C/S模式的允许用户在UNIX-LIKE 操作系统中去监控,控制进程数量的系统。Supervisor作为主进程,Supervisor下管理的时一些子进程,当某一个子进程异常退出时,Supervisor会立马对此做处理,通常会守护进程,重启该进程。
主要组件
supervisord
是服务端程序,主要功能是启动supervisord服务,启动supervisor管理的子进程,对进程进行管理的服务。
supervisorctl
是客户端程序,主要功能就是管理(启动/关闭/重启/状态等)子进程,提供shell环境进行处理。
web server
Web Server主要可以在界面上管理进程,Web Server其实是通过XML_RPC来实现的,可以向supervisor请求数据,也可以控制supervisor及子进程。配置在[inet_http_server]块里面
XML_RPC
远程调用的,上面的supervisorctl和Web Server就它实现
安装与使用(ubuntu)
1.安装
apt-get install supervisor
默认配置文件/etc/supervisor/supervisord.conf
2.目录结构
/etc/supervisor
├── conf.d
│ └── redis_monitor.conf
└── supervisord.conf
3.启动
supervisord -c /etc/supervisor/supervisord.conf
4.查看是否启动
ps aux | grep supervisord
5.查看配置文件详情
echo_supervisord_conf > /etc/supervisor/supervisord.conf
6.配置监控redis-server
在conf.d下新建文件 redis_monitor.conf (只配置基本的信息)
[program:redis]
command = redis-server
autostart=true
autorestart=true
startsecs=1
7.使用supervisorctl 管理监控进程
supervisorctl update /etc/supervisor/conf.d/redis_monitor.conf
redis: added process group
8.手动kill redis-server
kill -9 redis-pid
/tmp/supervisor.log输出如下:
2017-09-04 06:10:16,712 INFO exited: redis (terminated by SIGKILL; not expected)
2017-09-04 06:10:17,718 INFO spawned: 'redis' with pid 7005
2017-09-04 06:10:18,779 INFO success: redis entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
查看redis-server状态(已经被重启)
ps aux | grep redis-server
root 7005 0.0 0.7 29924 7444 ? Sl 06:10 0:00 redis-server *:6379
root 7010 0.0 0.0 4684 848 pts/7 S+ 06:11 0:00 grep --color=auto redis-server
9.supervisorctl 使用
supervisorctl | status
redis RUNNING pid 7214, uptime 0:00:58
10.help 命令
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version
当被管理的进程更新时,需要update 对应的conf文件
11.开启web页面
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
这样就可以通过web页面管理被监控的程序。