supervisord 安装、配置、应用

【产生背景】

   在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便。如果有一个工具能够实现每台机器上多个进程的简单高效中心化管理将是非常方便的。于是Supervisord工具应运而生。与Supervisord类似的工具包括monit, daemontools和runit。本文只涉及Supervisord。

【简介】

  supervisord的官网:http://supervisord.org。看懂英文的可以不用看我的博客,直接看文档就行了,文档写得非常好。点个赞!!  

  Supervisor是一个客户/服务器系统,它可以在类Unix系统中管理控制大量进程。Supervisor使用python开发,有多年历史,目前很多生产环境下的服务器都在使用Supervisor。

  Supervisor的服务器端称为supervisord,主要负责在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件。可以在一个配置文件中配置相关参数,包括Supervisord自身的状态,其管理的各个子进程的相关属性。配置文件一般位于/etc/supervisord.conf。

  Supervisor的客户端称为supervisorctl,它提供了一个类shell的接口(即命令行)来使用supervisord服务端提供的功能。通过supervisorctl,用户可以连接到supervisord服务器进程,获得服务器进程控制的子进程的状态,启动和停止子进程,获得正在运行的进程列表。客户端通过Unix域套接字或者TCP套接字与服务端进行通信,服务器端具有身份凭证认证机制,可以有效提升安全性。当客户端和服务器位于同一台机器上时,客户端与服务器共用同一个配置文件/etc/supervisord.conf,通过不同标签来区分两者的配置。

  Supervisor也提供了一个web页面来查看和管理进程状态,这个功能用得人比较少。

【平台要求】

  Supervisor可以运行在大多数Unix系统上,但不支持在Windows系统上运行。

  Supervisor需要Python2.4及以上版本,但任何Python 3版本都不支持。

说明 :最近在做任务导出的时候用到了,不停的执行从队列获取数据执行导出计划,非常的实用,推荐给大家;
安装依赖包

yum -y install docbook-style-xsl xmlto git wxGTK wxGTK-devel expat expat-devel librabbitmq make gcc44 gcc44-c++ libstdc++44-devel hg libtool openssl openssl-devel unixODBC unixODBC-devel unixODBC-libs ncurses ncurses-devel tk python26 libtool autoconf automake xmlto nmap.x86_64 xmlto.x86_64

安装python

cd /usr/local/src

tar zxvf Python-2.7.3.tgz

cd Python-2.7.3

./configure

make && make install

cd /usr/local/src

sh setuptools-0.6c11-py2.7.egg

easy_install supervisor

建立配置文件 如下参考(线上服务器使用如下)

mkdir /etc/supervisord

mv supervisord.conf /etc/

mv allindex.conf /etc/supervisord

mv weiboauthor.conf /etc/supervisord

mv clientuser.conf /etc/supervisord

mv supervisord.sh /etc/init.d/supervisord

chmod 755 /etc/init.d/supervisord

chkconfig –add supervisord

chkconfig –level 35 supervisord on

ln -s /usr/local/bin/supervisord /usr/bin/supervisord

service supervisord start

常用命令

supervisord 启动supervisor supervisorctl 打开命令行

[root@localhost]# supervisorctl

redis RUNNING pid 24068, uptime 3:41:55

ctl中: help 查看命令 ctl中: status 查看状态

比如:任务中心如果报告下载进度一直未0

解决方法:

命令supervisorctl reload

常用配置文件参数解析线上应用目录 /etc/supervisord

process_name是进程的名字,由于这里要启动4个进程,所以要用process_num来区分

umask是程序执行的权限参数

startsecs这个参数是程序启动的等待时间

stopwaitsecs这个参数是程序停止的等待时间

redirect_stderr这个参数将错误流重定向到std的流输出,这样可以省去一个日志文件的配置,当然也可以不用这个参数分开配置日志文件

stdout_logfile 这个参数是STD流输出日志文件的路径,Tornado会输出所有的请求和错误信息,通过这个可以统一做日志处理,分隔什么的,在程序里就只需要print到std流就行了。

numprocs 这个参数指定了进程的数量,这里是4,表明要启动4个Tornado进程

numprocs_start 这个参数指定了进程号的起始编号,这里是1,这样前面的command和process_name里的%(process_num)02d部分就会在执行的时候被替换为01~05的字符串

全部配置文件详细解释

; Sample supervisor config file.

;

; For more information on the config file, please see:

; http://supervisord.org/configuration.html

;

; Note: shell expansion (“~” or “$HOME”) is not supported. Environment

; variables can be expanded using this syntax: “%(ENV_HOME)s”.

[unix_http_server] ; supervisord的unix socket服务配置

file=/tmp/supervisor.sock ; socket文件的保存目录

;chmod=0700 ; socket的文件权限 (default 0700)

;chown=nobody:nogroup ; socket的拥有者和组名

;username=user ; 默认不需要登陆用户 (open server)

;password=123 ; 默认不需要登陆密码 (open server)

;[inet_http_server] ; supervisord的tcp服务配置

;port=127.0.0.1:9001 ; tcp端口

;username=user ; tcp登陆用户

;password=123 ; tcp登陆密码

[supervisord] ; supervisord的主进程配置

logfile=/tmp/supervisord.log ; 主要的进程日志配置

logfile_maxbytes=50MB ; 最大日志体积,默认50MB

logfile_backups=10 ; 日志文件备份数目,默认10

loglevel=info ; 日志级别,默认info; 还有:debug,warn,trace

pidfile=/tmp/supervisord.pid ; supervisord的pidfile文件

nodaemon=false ; 是否以守护进程的方式启动

minfds=1024 ; 最小的有效文件描述符,默认1024

minprocs=200 ; 最小的有效进程描述符,默认200

;umask=022 ; 进程文件的umask,默认200

;user=chrism ; 默认为当前用户,如果为root则必填

;identifier=supervisor ; supervisord的表示符, 默认时’supervisor’

;directory=/tmp ; 默认不cd到当前目录

;nocleanup=true ; 不在启动的时候清除临时文件,默认false

;childlogdir=/tmp ; (‘AUTO’ child log dir, default $TEMP)

;environment=KEY=value ; 初始键值对传递给进程

;strip_ansi=false ; (strip ansi escape codes in logs; def. false)

; 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

[supervisorctl]

serverurl=unix:/tmp/supervisor.sock ; use a unix: URL for a unix socket

;serverurl=http://127.0.0.1:9001 ;
use an http: url to specify an inet socket ;
username=chris ; 如果设置应该与http_username相同 ;
password=123 ; 如果设置应该与http_password相同 ;
prompt=mysupervisor ; 命令行提示符,默认“supervisor” ;
history_file=~/.sc_history ;
命令行历史纪录 ; The below sample program section shows all possible program subsection values, ;
create one or more ‘real’ program: sections to be able to control them under ;
[program:theprogramname] ;
command=/bin/cat ; 运行的程序 (相对使用PATH路径, 可以使用参数) ;
process_name=%(program_name)s ; 进程名表达式,默认为%(program_name)s ;
numprocs=1 ; 默认启动的进程数目,默认为1 ;
directory=/tmp ; 在运行前cwd到指定的目录,默认不执行cmd ;
umask=022 ; 进程umask,默认None ;
priority=999 ; 程序运行的优先级,默认999 ;
autostart=true ; 默认随supervisord自动启动,默认true ;
autorestart=unexpected ; whether/when to restart (default: unexpected) ;
startsecs=1 ; number of secs prog must stay running (def. 1) ;
startretries=3 ; max # of serial start failures (default 3) ;
exitcodes=0,2 ; 期望的退出码,默认0,2 ;
stopsignal=QUIT ; 杀死进程的信号,默认TERM;
stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) ;
stopasgroup=false ; 向unix进程组发送停止信号,默认false ;
killasgroup=false ; 向unix进程组发送SIGKILL信号,默认false ;
user=chrism ; 为运行程序的unix帐号设置setuid ;
redirect_stderr=true ; 将标准错误重定向到标准输出,默认false ;
stdout_logfile=/a/path ; 标准输出的文件路径NONE=none;默认AUTO ;
stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;
stdout_logfile_backups=10 ; # of stdout logfile backups (default 10) ;
stdout_capture_maxbytes=1MB ; number of bytes in ‘capturemode’ (default 0) ;
stdout_events_enabled=false ; emit events on stdout writes (default false) ;
stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO ;
stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;
stderr_logfile_backups=10 ; # of stderr logfile backups (default 10) ;
stderr_capture_maxbytes=1MB ; number of bytes in ‘capturemode’ (default 0) ;
stderr_events_enabled=false ; emit events on stderr writes (default false) ;
environment=A=1,B=2 ; process environment additions (def no adds) ;
serverurl=AUTO ; override serverurl computation (childutils) ; The below sample eventlistener section shows all possible ; eventlistener subsection values, create one or more ‘real’ ; eventlistener: sections to be able to handle event notifications ;
sent by supervisor. ;[eventlistener:theeventlistenername] ;
command=/bin/eventlistener ; 运行的程序 (相对使用PATH路径, 可以使用参数) ;
process_name=%(program_name)s ; 进程名表达式,默认为%(program_name)s ;
numprocs=1 ; 默认启动的进程数目,默认为1 ;
events=EVENT ; event notif. types to subscribe to (req’d) ;
buffer_size=10 ; 事件缓冲区队列大小,默认10 ;
directory=/tmp ; 在运行前cwd到指定的目录,默认不执行cmd ;
umask=022 ; 进程umask,默认None ;
priority=-1 ; 程序运行的优先级,默认-1 ;
autostart=true ; 默认随supervisord自动启动,默认true ;
autorestart=unexpected ; whether/when to restart (default: unexpected) ;
startsecs=1 ; number of secs prog must stay running (def. 1) ;
startretries=3 ; max # of serial start failures (default 3) ;
exitcodes=0,2 ; 期望的退出码,默认0,2 ;
stopsignal=QUIT ; 杀死进程的信号,默认TERM ;
stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) ;
stopasgroup=false ; 向unix进程组发送停止信号,默认false ;
killasgroup=false ; 向unix进程组发送SIGKILL信号,默认false ;
user=chrism ; setuid to this UNIX account to run the program ;
redirect_stderr=true ; redirect proc stderr to stdout (default false) ;
stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO ;
stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;
stdout_logfile_backups=10 ; # of stdout logfile backups (default 10) ;
stdout_events_enabled=false ; emit events on stdout writes (default false) ;
stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO ;
stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;
stderr_logfile_backups ; # of stderr logfile backups (default 10) ;
stderr_events_enabled=false ; emit events on stderr writes (default false) ;
environment=A=1,B=2 ; process environment additions ;
serverurl=AUTO ; override serverurl computation (childutils) ; The below sample group section shows all possible group values, ; create one or more ‘real’ group: sections to create “heterogeneous” ; process groups. ;[group:thegroupname] ;
programs=progname1,progname2 ; 任何在[program:x]中定义的x ;
priority=999 ; 程序运行的优先级,默认999 ; The [include] section can just contain the “files” setting. This ; setting can list multiple files (separated by whitespace or ; newlines). It can also contain wildcards. The filenames are ; interpreted as relative to this file. Included files cannot ; include files themselves. ;[include] ;
files = relative/directory/*.ini

关键部分是program:nmbs, program:spvs-03和program:ui,这三部分为主机cma03配置了让supervisord管理的storm进程NimbusServer, Supervisor和Mdrillui。

有几个配置项值得解释一下,可以根据需要自行设置。

 1. stopasgroup=true。这一配置项的作用是:如果supervisord管理的进程px又产生了若干子进程,使用supervisorctl停止px进程,停止信号会传播给px产生的所有子进程,确保子进程也一起停止。这一配置项对希望停止所有进程的需求是非常有用的。

 2. autostart=true。这一配置项的作用是:当启动supervisord的时候会将该配置项设置为true的所有进程自动启动。

【启动supervisord】

  确保配置无误后可以在每台主机上使用下面的命令启动supervisor的服务器端supervisord

 supervisord

【停止supervisord】

supervisorctl shutdown

【重新加载配置文件】

supervisorctl reload

【进程管理】

1.启动supervisord管理的所有进程

supervisorctl start all

2.停止supervisord管理的所有进程

supervisorctl stop all

3.启动supervisord管理的某一个特定进程

supervisorctl start program-name // program-name为[program:xx]中的xx

4.停止supervisord管理的某一个特定进程

supervisorctl stop program-name  // program-name为[program:xx]中的xx

5.重启所有进程或所有进程

supervisorctl restart all  // 重启所有
supervisorctl reatart program-name // 重启某一进程,program-name为[program:xx]中的xx

6.查看supervisord当前管理的所有进程的状态

supervisorctl status
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值