Supervisor
简介
Supervisor官网地址:http://supervisord.org/
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
supervisor管理这些进程是把他们当做自己的子进程来管理,supervisor不能管理以daemon形式运行的进程,supervisor只能管理前台运行的进程。
Supervisor组件
Supervisord
主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。同时内置web server和XML-RPC Interface,轻松实现进程管理。。该服务的配置文件在/etc/supervisor/supervisord.conf。
Supervisorctl
客户端的命令行工具,提供一个类似shell的操作接口,通过它你可以连接到不同的supervisord进程上来管理它们各自的子程序,命令通过UNIX socket或者TCP来和服务通讯。用户通过命令行发送消息给supervisord,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。服务端也可以要求客户端提供身份验证之后才能进行操作。
Web Server
Superviosr提供了web server功能,可通过web控制进程(需要设置[inethttpserver]配置项)。
XML-RPC Interface
XML-RPC接口, 就像HTTP提供WEB UI一样,用来控制supervisor和由它运行的程序。
Supervisor应用
安装 Supervisor
yum install epel-* yum install supervisor -y systemctl start supervisord systemctl enable supervisord
配置文件
1 # 默认配置
2 [root@devops ~]# sed -e '/^;/d' -e '/^$/d' /etc/supervisord.conf
3 [unix_http_server]
4 file=/var/run/supervisor/supervisor.sock ; (the path to the socket file)
5 [supervisord]
6 logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
7 logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
8 logfile_backups=10 ; (num of main logfile rotation backups;default 10)
9 loglevel=info ; (log level;default info; others: debug,warn,trace)
10 pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
11 nodaemon=false ; (start in foreground if true;default false)
12 minfds=1024 ; (min. avail startup file descriptors;default 1024)
13 minprocs=200 ; (min. avail process descriptors;default 200)
14 [rpcinterface:supervisor]
15 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
16 [supervisorctl]
17 serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
18 [include]
19 files = supervisord.d/*.ini
启动文件 demo
1 [root@devops supervisord.d]# cat nginx.ini
2 [program:nginx] # 定义名称
3 directory=/usr/local/nginx/sbin # 工作目录
4 command=/usr/local/nginx/sbin/nginx -g 'daemon off;' # 启动参数
5 autostart=true # 是否自动启动
6 autorestart=true # 自动自愈
7 stderr_logfile=/tmp/nginx_stderr.log # 错误日志
8 stdout_logfile=/tmp/nginx_stdout.log # 输出日志
9 user=root # 启动用户
10 stopsignal=INT # 进程停止信号, 可以为 TERM, HUP,INT,QUIT,KILL,USR1等 默认为TERM
11 startsecs=10 # 启动多少秒后进行判定, 如果结果不是 running 则再次重启, 默认1
12 startretries=5 # 如果 启动五次失败后不在重启.
13 stopasgroup=true # 如果管理的服务器也是分为主进程子进程, 设置为 true 则 supervisor 会把真个进程杀掉, false 则只杀掉 master 进程.默认为 false
作者:闫世成
出处:http://cnblogs.com/yanshicheng