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



posted @ 2022-01-05 21:44  闫世成  阅读(73)  评论(0编辑  收藏  举报