supervisor服务简介
一、Supervisord服务简介
在类Unix系统中管理控制大量进程。Supervisor使用python开发。
Supervisor的服务器端称为supervisord,主要负责在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件。可以在一个配置文件中配置相关参数,包括Supervisord自身的状态,其管理的各个子进程的相关属性。配置文件一般位于/etc/supervisord.conf。
Supervisor的客户端称为supervisorctl,它提供了一个类shell的接口(即命令行)来使用supervisord服务端提供的功能。通过supervisorctl,用户可以连接到supervisord服务器进程,获得服务器进程控制的子进程的状态,启动和停止子进程,获得正在运行的进程列表。客户端通过Unix域套接字或者TCP套接字与服务端进行通信,服务器端具有身份凭证认证机制,可以有效提升安全性。当客户端和服务器位于同一台机器上时,客户端与服务器共用同一个配置文件/etc/supervisord.conf,通过不同标签来区分两者的配置。
Supervisor可以运行在大多数Unix系统上,但不支持在Windows系统上运行。
Supervisor需要Python2.4及以上版本,但任何Python 3版本都不支持。
二、Supervisord部署安装
1、检查服务器是否有python2.X环境,如果没有,进行python环境配置(如果已有python环境,可越过此步骤)
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz tar -zxvf Python-2.7.9.tgz cd Python-2.7.9 ./configure --prefix=/usr/local/python-2.7.9 make && make install
2、下载安装包
wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz
3、安装依赖
yum install python-setuptools-devel
4、解压并安装
tar zxvf supervisor-3.1.3.tar.gz cd supervisor-3.1.3 python setup.py install
三、Supervisord配置详解
supervisord.conf(名称可自定义)
参数 |
作用 |
command |
启动程序使用的命令,可以是绝对路径或者相对路径 |
process_name |
一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s |
numprocs |
Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1 |
numprocs_start |
一个int偏移值,当启动实例的时候用来计算numprocs的值 |
priority |
权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999 |
autostart |
如果设置为true,当supervisord启动的时候,进程会自动重启。 |
autorestart |
值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。 |
startsecs |
程序启动后等待多长时间后才认为程序启动成功 |
startretries |
supervisord尝试启动一个程序时尝试的次数。默认是3 |
exitcodes |
一个预期的退出返回码,默认是0,2。 |
stopsignal |
当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。 |
stopwaitsecs |
在操作系统给supervisord发送SIGCHILD信号时等待的时间 |
stopasgroup |
如果设置为true,则会使supervisor发送停止信号到整个进程组 |
killasgroup |
如果设置为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。 |
user |
如果supervisord以root运行,则会使用这个设置用户启动子程序 |
redirect_stderr |
如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符。 - stdout_logfile:把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置。 |
stdout_logfile_maxbytes |
标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小 |
stdout_logfile_backups |
标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份 |
stdout_capture_maxbytes |
当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB |
stdout_events_enabled |
如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发 |
stderr_logfile |
把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true |
stderr_logfile_maxbytes |
错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小 |
stderr_logfile_backups |
错误日志轮转备份的数量,默认是10,如果设置为0,则不备份 |
stderr_capture_maxbytes |
当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB |
stderr_events_enabled |
如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发 |
environment |
一个k/v对的list列表 |
directory |
supervisord在生成子进程的时候会切换到该目录 |
umask |
设置进程的umask |
serverurl |
是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url |
四、Supervisord常用命令
命令 |
作用 |
supervisorctl help |
查看supervisorctl支持的命令 |
supervisorctl status |
查看当前运行的进程列表 |
supervisorctl update |
更新新的配置到supervisord (不会重启原来已运行的程序) |
supervisorctl reload |
载入所有配置文件,并按新的配置启动、管理所有进程 (会重启原来已运行的程序) |
supervisorctl start xxx: |
启动某个进程 |
supervisorctl stop groupworker |
重启所有属于名为groupworker这个分组的进程 (start,restart同理) |
supervisorctl stop all |
停止全部进程 注:start、restart、stop都不会载入最新的配置文 |
supervisorctl reread |
当一个服务由自动启动修改为手动启动时执行 |