选取Supervisor管理Redis进度的不二法门教程,安装配置

By admin in 美高梅手机版4858 on 2019年4月4日

Supervisor介绍

Supervisor 允许其用户在UNIX类操作系统上主宰八个进程。 块如下:

方便

供给为每一个过程实例编写rc.d本子平常是不便宜的。 rc.d脚本是进程开头化/自动运行/管理的常用方式,但写入和护卫或然会很优伤。别的,rc.d剧本不可能自动重新起动崩溃的经过,并且许多程序在崩溃时不会平常重新启航。Supervisord运转进度作为其子进度,并得以配备为在崩溃时自动重新起动它们。它也足以自行配置为在其本人的调用中运营进程。

准确性

在UNIX上的历程平常很难获取确切的上/下状态。Pidfiles常常说谎。Supervisord运转进度作为子进度,所以它连接知道它的子进程的的确的上/下状态,能够方便地询问那个多少。

进程组

进度平常供给以组为单位运行和平息,有时依然在“优先级依次”中。人们经常难以分解那或多或少。Supervisor
允许你为经过分配优先级,并允许用户通过supervisorctl客户端发出指令,如“全体起头”和“重新起动全部”,以预分配的预先级依次运维它们。其它,进度能够分组为“进程组”,一组逻辑关系进程能够看做2个单元甘休并运转。

Supervisor介绍

Supervisor 允许其用户在UNIX类操作系统上决定多个经过。 块如下:

方便

需求为每一种进程实例编写rc.d剧本平时是不便利的。 rc.d脚本是经过伊始化/自动运行/管理的常用格局,但写入和保证也许会十分惨痛。其它,rc.d本子无法自动重新开动崩溃的经过,并且许多先后在崩溃时不会符合规律重新启航。Supervisord运行进程作为其子进度,并能够配备为在崩溃时自动重新起动它们。它也得以活动配置为在其自己的调用中运行进度。

准确性

在UNIX上的历程日常很难获取准确的上/下状态。Pidfiles平时说谎。Supervisord运营进度作为子进度,所以它连接知道它的子进程的真的的上/下状态,可以1本万利地查询那一个数量。

进程组

进程平时需求以组为单位运行和终止,有时仍然在“优先级依次”中。人们时时难以分解这或多或少。Supervisor
允许你为经过分配优先级,并允许用户通过supervisorctl客户端发出指令,如“全体起始”和“重新开动全数”,以预分配的预先级依次运维它们。其余,进度能够分组为“进度组”,一组逻辑关系进度能够视作1个单元结束并运营。

前言

supervisor那东西,其实就是用来管理进程的。大家怎么要用supervisor呢?因为,相对于大家linux古板的过程管理方法来说,它有广大的优势,要不然大家也不会闲着没事去用supervisor了。
OK,上边来看望supervisor有何好处吗。

特征

简单

Supervisor通过简单的INI风格的配备文件实行铺排,易于学习。它提供了成都百货上千种种进度选项,使你的生活更便于,如重复起动失利的长河和电动日志轮换。

集中

进度能够独自或分组控制。您可以布署Supervisor以提供地方或远程命令行和Web界面。

高效

Supervisor通过fork / exec运行其子进度,子进度不开始展览后台进度。

扩张性强

Supervisor有贰个粗略的轩然大波通报业协会议,用别的语言编写的次序都得以用来管理它,还有七个用来控制的XML-RubiconPC接口。它还采纳能够由Python开发人士利用的扩张点营造。

兼容

supervisor除Windows之外。它在Linux,Mac OS
X,Solaris和FreeBSD上拓展了测试和补助。它完全用Python编写,由此安装不供给C编写翻译器。

稳定性

Supervisor已经存在多年,并已在无数服务器上接纳。



特征

简单

Supervisor通过简单的INI风格的安排文件举办布局,易于学习。它提供了成都百货上千各类进程选项,使您的生活更便于,如再一次起动战败的历程和活动日志轮换。

美高梅手机版4858 ,集中

经过能够独自或分组控制。您能够配备Supervisor以提供本地或远程命令行和Web界面。

高效

Supervisor通过fork / exec运转其子进度,子进度不实行后台进度。

扩张性强

Supervisor有二个简易的轩然大波通报协议,用其余语言编写的顺序都能够用来保管它,还有二个用来控制的XML-凯雷德PC接口。它还动用能够由Python开发人士利用的恢弘点创设。

兼容

supervisor除Windows之外。它在Linux,Mac OS
X,Solaris和FreeBSD上开始展览了测试和支撑。它完全用Python编写,由此安装不须求C编写翻译器。

稳定性

Supervisor已经存在多年,并已在重重服务器上利用。



Supervisor 是叁个用 Python
完结的历程管理工科具,能够很便宜地开发银行,关闭,重启,查看,以及监理进度,当进程由于某种原因崩溃大概被误杀后,能够自动重启并发送事件通报。Supervisor
可谓运营利器,使用 Supervisor 来治本进程,能够增加系统的高可用天性。

  • 简单
    何以简单吗?因为大家普通管理linux进度的时候,1般的话都亟待自个儿编排1个能够实现进度start/stop/restart/reload作用的剧本,然后丢到/etc/init.d/下边。这么做有更仆难数不佳的地点,第三大家要编写这几个本子,那就很耗费时间耗力了。第一,当这一个进程挂掉的时候,linux不会自行重启它的,想要自动重启的话,大家还要协调写二个监督重启脚本。而,supervisor则足以健全的缓解那几个难点。好,怎么化解的呢,其实supervisor管理进程,就是通过fork/exec的法门把那么些被管制的进度,当作supervisor的子进程来运营。那样的话,我们若是在supervisor的安插文件中,把要管制的经过的可执行文件的门径写进去就OK了。那样就省下了大家就像是linux管理进程的时候,自身写控制脚本的劳动了。第二,被管制进程作为supervisor的子进度,当子进程挂掉的时候,父进度能够确切获取子进度挂掉的音信的,所以本来也就能够对挂掉的子进度实行活动重启了,当然重启照旧不重启,也要看你的配备文件之中有木有设置autostart=true了,那是后话。
  • 精确
    干什么说精确呢?因为linux对进度情形的反映,有时候不太标准。为何不纯粹?那么些楼主也不驾驭啊,官方文书档案是如此说的,知道的报告楼主一下啊,多谢不尽。而supervisor监察和控制子进度,获得的子进度状态的确是标准的。
  • 进程组
    supervisor能够对经过组集合保管,也正是说大家能够把要求管住的长河写到一个组里面,然后我们把那么些组作为多个对象进行田管,如运营,甘休,重启等等操作。而linux系统则是从未有过那种意义的,我们想要结束2个进度,只可以2个3个的去平息,要么就和好写个脚本去批量悬停。
  • 集中式管理
    supervisor管理的历程,进程组消息,全部都写在三个ini格式的文件里就OK了。而且,大家管理supervisor的时候的能够在地面开始展览管制,也足以远程管理,而且supervisor提供了贰个web界面,我们得以在web界面上监察和控制,管理进度。
    当然了,本地,远程和web管理的时候,要求调用supervisor的xml_rpc接口,这一个也是后话。
  • 有效性
    当supervisor的子进程挂掉的时候,操作系统会平昔给supervisor发功率信号。而任何的部分像样supervisor的工具,则是通过进度的pid文件,来发送功率信号的,然后定期轮询来重启失败的经过。显著supervisor特别火速。。。至于是怎么类似supervisor工具,这几个楼主就不太领悟了,楼主还据说过god,director,可是没用过。有趣味的意中人能够嬉戏
  • 可扩大性
    supervisor是个开源软件,牛逼点的,能够一直去改软件。但是大家大部分人要么安安分分商讨supervisot提供的接口吧,supervisor首要提供了四个可扩展的成效。多少个是event机制,这一个正是楼主那二日干的活要用到的东西。再叁个是xml_rpc,supervisor的web管理端和长途调用的时候,就要动用它了。
  • 权限
    我们伙儿都了然linux的进度,特别是侦听在十二四端口之下的进程,壹般用户超越陆壹%状态下,是不能够对其实行控制的。想要控制以来,必须求有root权限。而supervisor提供了3个效果,能够为supervisord恐怕每一种子进程,设置1个非root的user,那些user就能够管理它对应的经过了。
    唯独那成效,用不用就看大家本人的条件了
    再有局地什么包容性,稳定性,感觉用处一点都不大,就不扯了。

Supervisor 组件

supervisord

class=”program”>supervisord服务端程序。它承担在协调的调用中运行子程序,响应客户端的指令,重新启航崩溃或退出的子进度,记录其子进度stdoutstderr 输出,以及变化和拍卖相应于子进度生命周期中的“事件”。

配置文件。那平日位于/etc/supervisord.conf中。此布局文件是“Windows-INI”样式的布局文件。适当的文件系统权限来怜惜此文件尤其主要,因为它只怕包含未加密的用户名和密码。

supervisorctl

supervisor的命令行客户端名称叫  class=”program”>supervisorctl。它为 class=”program”>supervisor提供的效力提供了多少个接近shell的界面。从 class=”program”>supervisorctl,用户能够一连到差别的  class=”program”>supervisord,结束和起步的子进度,并获取运转的进度的列表 class=”program”>supervisord。

指令行客户端通过UNIX域套接字或Internet(TCP)套接字与服务器通讯。服务器能够预感客户端的用户在同意他执行命令在此以前应该出现认证凭证。客户端进程日常接纳与服务器相同的布署文件,但中间全数[supervisorctl]1部分的其它配置文件都得以符合规律办事。

Web Server

Web Server
能够经过浏览器访问查看和操纵进度情状,在置文件的[inet_http_server]块里配置选取Supervisor管理Redis进度的不二法门教程,安装配置。,访问服务器U路虎极光L(例如http:// localhost:9001 /)以通过Web界面查看和控制进度情形。“

XML-RPC接口

服务于Web
UI的均等的HTTP服务器提供了二个XML-SportagePC接口,可用于询问和决定 class=”program”>supervisor及其运营的次第。请参阅XML-RPC
API文档。


安装使用办法 点击那里
wuguiyunwei.com

Supervisor 组件

supervisord

class=”program”>supervisord服务端程序。它承受在融洽的调用中运行子程序,响应客户端的下令,重新开动崩溃或退出的子进程,记录其子进程stdoutstderr 输出,以及变更和拍卖相应于子进程生命周期中的“事件”。

配备文件。那日常位于/etc/supervisord.conf中。此布局文件是“Windows-INI”样式的配置文件。适当的文件系统权限来保证此文件特别重大,因为它只怕含有未加密的用户名和密码。

supervisorctl

supervisor的命令行客户端名称叫  class=”program”>supervisorctl。它为 class=”program”>supervisor提供的功能提供了二个近似shell的界面。从 class=”program”>supervisorctl,用户能够接连到分裂的  class=”program”>supervisord,截止和开发银行的子进程,并赢得运转的历程的列表 class=”program”>supervisord。

指令行客户端通过UNIX域套接字或Internet(TCP)套接字与服务器通讯。服务器能够断言客户端的用户在允许她执行命令之前应当出现认证凭证。客户端进程平常选取与服务器相同的布置文件,但内部装有[supervisorctl]一部分的其余配置文件都得以健康办事。

Web Server

Web Server
能够通过浏览器访问查看和控制进度意况,在置文件的[inet_http_server]块里配置,访问服务器UPAJEROL(例如http:// localhost:9001 /)以通过Web界面查看和控制进度意况。“

XML-RPC接口

服务于Web
UI的同样的HTTP服务器提供了二个XML-汉兰达PC接口,可用以询问和决定 class=”program”>supervisor及其运维的先后。请参阅XML-RPC
API文档。


安装使用办法 点击那里
wuguiyunwei.com

随着 Redis 越来越流行,越多的营业所都选拔上了 redis,由此 Redis
的进度管理就成了不少店铺都亟需面临的标题,本文介绍如何行使 Supervisor
来治本 Redis 进度。

安装

安装方式很简单。楼主的体系是debian,其余系统就背着了

aptitude -y install python-setuptools
easy-install supervisor
或者
pip install supervisor

Supervisor 简介

转变配置文件

安装好supervisor之后,私下认可是从没有过生成配置文件的。能够经过以下命令生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
大家平日是把布置文件放到/etc/上面,当然也能够放置任意路径上面。

Supervisor 包罗以下三个零部件。

启动

以下运营顺序由上到下优先级,依次递减

supervisord                                   #默认去找$CWD/supervisord.conf,也就是当前目录
supervisord                                   #默认$CWD/etc/supervisord.conf,也就当前目录下的etc目录
supervisord                                   #默认去找/etc/supervisord.conf的配置文件
supervisord -c /home/supervisord.conf         #到指定路径下去找配置文件

1、supervisord

supervisor组件
  • supervisord
    supervisord是supervisor的服务端程序。
    干的活:运行supervisor程序本身,运行supervisor管理的子进度,响应来自clients的伏乞,重启闪退或尤其退出的子进度,把子进度的stderr或stdout记录到日志文件中,生成和拍卖伊芙nt
  • supervisorctl
    那东西照旧有点用的,假如说supervisord是supervisor的服务端程序,那么supervisorctl正是client端程序了。supervisorctl有1个门类shell的指令行界面,大家得以行使它来查看子进度意况,运转/停止/重启子进度,获取running子进度的列表等等。。。最牛逼的有个别是,supervisorctl不仅能够接连到本机上的supervisord,还足以连接到长途的supervisord,当然在本机下面是透过UNIX
    socket连接的,远程是因而TCP
    socket连接的。supervisorctl和supervisord之间的通讯,是通过xml_rpc实现的。
    相应的配置在[supervisorctl]块里面
  • Web Server
    Web Server主要能够在界面上管理进度,Web
    Server其实是经过XML_汉兰达PC来完结的,能够向supervisor请求数据,也足以操纵supervisor及子进度。配置在[inet_http_server]块里面
  • XML_RPC接口
    那么些正是长距离调用的,上边的supervisorctl和Web Server正是它弄的

服务端程序,首要功用是开行 supervisord
服务及其管理的子进度,记录日志,重启崩溃的子进程,等。

配备文件详解
[unix_http_server]            
file=/tmp/supervisor.sock   ; socket文件的路径,supervisorctl用XML_RPC和supervisord通信就是通过它进行
                              的。如果不设置的话,supervisorctl也就不能用了  
                              不设置的话,默认为none。 非必须设置        
;chmod=0700                 ; 这个简单,就是修改上面的那个socket文件的权限为0700
                              不设置的话,默认为0700。 非必须设置
;chown=nobody:nogroup       ; 这个一样,修改上面的那个socket文件的属组为user.group
                              不设置的话,默认为启动supervisord进程的用户及属组。非必须设置
;username=user              ; 使用supervisorctl连接的时候,认证的用户
                               不设置的话,默认为不需要用户。 非必须设置
;password=123               ; 和上面的用户名对应的密码,可以直接使用明码,也可以使用SHA加密
                              如:{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d
                              默认不设置。。。非必须设置

;[inet_http_server]         ; 侦听在TCP上的socket,Web Server和远程的supervisorctl都要用到他
                              不设置的话,默认为不开启。非必须设置
;port=127.0.0.1:9001        ; 这个是侦听的IP和端口,侦听所有IP用 :9001或*:9001。
                              这个必须设置,只要上面的[inet_http_server]开启了,就必须设置它
;username=user              ; 这个和上面的uinx_http_server一个样。非必须设置
;password=123               ; 这个也一个样。非必须设置

[supervisord]                ;这个主要是定义supervisord这个服务端进程的一些参数的
                              这个必须设置,不设置,supervisor就不用干活了
logfile=/tmp/supervisord.log ; 这个是supervisord这个主进程的日志路径,注意和子进程的日志不搭嘎。
                               默认路径$CWD/supervisord.log,$CWD是当前目录。。非必须设置
logfile_maxbytes=50MB        ; 这个是上面那个日志文件的最大的大小,当超过50M的时候,会生成一个新的日 
                               志文件。当设置为0时,表示不限制文件大小
                               默认值是50M,非必须设置。              
logfile_backups=10           ; 日志文件保持的数量,上面的日志文件大于50M时,就会生成一个新文件。文件
                               数量大于10时,最初的老文件被新文件覆盖,文件数量将保持为10
                               当设置为0时,表示不限制文件的数量。
                               默认情况下为10。。。非必须设置
loglevel=info                ; 日志级别,有critical, error, warn, info, debug, trace, or blather等
                               默认为info。。。非必须设置项
pidfile=/tmp/supervisord.pid ; supervisord的pid文件路径。
                               默认为$CWD/supervisord.pid。。。非必须设置
nodaemon=false               ; 如果是true,supervisord进程将在前台运行
                               默认为false,也就是后台以守护进程运行。。。非必须设置
minfds=1024                  ; 这个是最少系统空闲的文件描述符,低于这个值supervisor将不会启动。
                               系统的文件描述符在这里设置cat /proc/sys/fs/file-max
                               默认情况下为1024。。。非必须设置
minprocs=200                 ; 最小可用的进程描述符,低于这个值supervisor也将不会正常启动。
                              ulimit  -u这个命令,可以查看linux下面用户的最大进程数
                              默认为200。。。非必须设置
;umask=022                   ; 进程创建文件的掩码
                               默认为022。。非必须设置项
;user=chrism                 ; 这个参数可以设置一个非root用户,当我们以root用户启动supervisord之后。
                               我这里面设置的这个用户,也可以对supervisord进行管理
                               默认情况是不设置。。。非必须设置项
;identifier=supervisor       ; 这个参数是supervisord的标识符,主要是给XML_RPC用的。当你有多个
                               supervisor的时候,而且想调用XML_RPC统一管理,就需要为每个
                               supervisor设置不同的标识符了
                               默认是supervisord。。。非必需设置
;directory=/tmp              ; 这个参数是当supervisord作为守护进程运行的时候,设置这个参数的话,启动
                               supervisord进程之前,会先切换到这个目录
                               默认不设置。。。非必须设置
;nocleanup=true              ; 这个参数当为false的时候,会在supervisord进程启动的时候,把以前子进程
                               产生的日志文件(路径为AUTO的情况下)清除掉。有时候咱们想要看历史日志,当 
                               然不想日志被清除了。所以可以设置为true
                               默认是false,有调试需求的同学可以设置为true。。。非必须设置
;childlogdir=/tmp            ; 当子进程日志路径为AUTO的时候,子进程日志文件的存放路径。
                               默认路径是这个东西,执行下面的这个命令看看就OK了,处理的东西就默认路径
                               python -c "import tempfile;print tempfile.gettempdir()"
                               非必须设置
;environment=KEY="value"     ; 这个是用来设置环境变量的,supervisord在linux中启动默认继承了linux的
                               环境变量,在这里可以设置supervisord进程特有的其他环境变量。
                               supervisord启动子进程时,子进程会拷贝父进程的内存空间内容。 所以设置的
                               这些环境变量也会被子进程继承。
                               小例子:environment=name="haha",age="hehe"
                               默认为不设置。。。非必须设置
;strip_ansi=false            ; 这个选项如果设置为true,会清除子进程日志中的所有ANSI 序列。什么是ANSI
                               序列呢?就是我们的\n,\t这些东西。
                               默认为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]    ;这个选项是给XML_RPC用的,当然你如果想使用supervisord或者web server 这 
                              个选项必须要开启的
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface 

[supervisorctl]              ;这个主要是针对supervisorctl的一些配置  
serverurl=unix:///tmp/supervisor.sock ; 这个是supervisorctl本地连接supervisord的时候,本地UNIX socket
                                        路径,注意这个是和前面的[unix_http_server]对应的
                                        默认值就是unix:///tmp/supervisor.sock。。非必须设置
;serverurl=http://127.0.0.1:9001 ; 这个是supervisorctl远程连接supervisord的时候,用到的TCP socket路径
                                   注意这个和前面的[inet_http_server]对应
                                   默认就是http://127.0.0.1:9001。。。非必须项

;username=chris              ; 用户名
                               默认空。。非必须设置
;password=123                ; 密码
                              默认空。。非必须设置
;prompt=mysupervisor         ; 输入用户名密码时候的提示符
                               默认supervisor。。非必须设置
;history_file=~/.sc_history  ; 这个参数和shell中的history类似,我们可以用上下键来查找前面执行过的命令
                               默认是no file的。。所以我们想要有这种功能,必须指定一个文件。。。非
                               必须设置

; 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
; supervisor.

;[program:theprogramname]      ;这个就是咱们要管理的子进程了,":"后面的是名字,最好别乱写和实际进程
                                有点关联最好。这样的program我们可以设置一个或多个,一个program就是
                                要被管理的一个进程
;command=/bin/cat              ; 这个就是我们的要启动进程的命令路径了,可以带参数
                                例子:/home/test.py -a 'hehe'
                                有一点需要注意的是,我们的command只能是那种在终端运行的进程,不能是
                                守护进程。这个想想也知道了,比如说command=service httpd start。
                                httpd这个进程被linux的service管理了,我们的supervisor再去启动这个命令
                                这已经不是严格意义的子进程了。
                                这个是个必须设置的项
;process_name=%(program_name)s ; 这个是进程名,如果我们下面的numprocs参数为1的话,就不用管这个参数
                                 了,它默认值%(program_name)s也就是上面的那个program冒号后面的名字,
                                 但是如果numprocs为多个的话,那就不能这么干了。想想也知道,不可能每个
                                 进程都用同一个进程名吧。


;numprocs=1                    ; 启动进程的数目。当不为1时,就是进程池的概念,注意process_name的设置
                                 默认为1    。。非必须设置
;directory=/tmp                ; 进程运行前,会前切换到这个目录
                                 默认不设置。。。非必须设置
;umask=022                     ; 进程掩码,默认none,非必须
;priority=999                  ; 子进程启动关闭优先级,优先级低的,最先启动,关闭的时候最后关闭
                                 默认值为999 。。非必须设置
;autostart=true                ; 如果是true的话,子进程将在supervisord启动后被自动启动
                                 默认就是true   。。非必须设置
;autorestart=unexpected        ; 这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected
                                 和true。如果为false的时候,无论什么情况下,都不会被重新启动,
                                 如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退 
                                 出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无
                                 条件的重启
;startsecs=1                   ; 这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启
                                 动成功了
                                 默认值为1 。。非必须设置
;startretries=3                ; 当进程启动失败后,最大尝试启动的次数。。当超过3次后,supervisor将把
                                 此进程的状态置为FAIL
                                 默认值为3 。。非必须设置
;exitcodes=0,2                 ; 注意和上面的的autorestart=unexpected对应。。exitcodes里面的定义的
                                 退出码是expected的。
;stopsignal=QUIT               ; 进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号
                                  默认为TERM 。。当用设定的信号去干掉进程,退出码会被认为是expected
                                  非必须设置
;stopwaitsecs=10               ; 这个是当我们向子进程发送stopsignal信号后,到系统返回信息
                                 给supervisord,所等待的最大时间。 超过这个时间,supervisord会向该
                                 子进程发送一个强制kill的信号。
                                 默认为10秒。。非必须设置
;stopasgroup=false             ; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有
                                 子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程
                                 有可能会变成孤儿进程。所以咱们可以设置可个选项,把整个该子进程的
                                 整个进程组都干掉。 设置为true的话,一般killasgroup也会被设置为true。
                                 需要注意的是,该选项发送的是stop信号
                                 默认为false。。非必须设置。。
;killasgroup=false             ; 这个和上面的stopasgroup类似,不过发送的是kill信号
;user=chrism                   ; 如果supervisord是root启动,我们在这里设置这个非root用户,可以用来
                                 管理该program
                                 默认不设置。。。非必须设置项
;redirect_stderr=true          ; 如果为true,则stderr的日志会被写入stdout日志文件中
                                 默认为false,非必须设置
;stdout_logfile=/a/path        ; 子进程的stdout的日志路径,可以指定路径,AUTO,none等三个选项。
                                 设置为none的话,将没有日志产生。设置为AUTO的话,将随机找一个地方
                                 生成日志文件,而且当supervisord重新启动的时候,以前的日志文件会被
                                 清空。当 redirect_stderr=true的时候,sterr也会写进这个日志文件
;stdout_logfile_maxbytes=1MB   ; 日志文件最大大小,和[supervisord]中定义的一样。默认为50
;stdout_logfile_backups=10     ; 和[supervisord]定义的一样。默认10
;stdout_capture_maxbytes=1MB   ; 这个东西是设定capture管道的大小,当值不为0的时候,子进程可以从stdout
                                 发送信息,而supervisor可以根据信息,发送相应的event。
                                 默认为0,为0的时候表达关闭管道。。。非必须项
;stdout_events_enabled=false   ; 当设置为ture的时候,当子进程由stdout向文件描述符中写日志的时候,将
                                 触发supervisord发送PROCESS_LOG_STDOUT类型的event
                                 默认为false。。。非必须设置
;stderr_logfile=/a/path        ; 这个东西是设置stderr写的日志路径,当redirect_stderr=true。这个就不用
                                 设置了,设置了也是白搭。因为它会被写入stdout_logfile的同一个文件中
                                 默认为AUTO,也就是随便找个地存,supervisord重启被清空。。非必须设置
;stderr_logfile_maxbytes=1MB   ; 这个出现好几次了,就不重复了
;stderr_logfile_backups=10     ; 这个也是
;stderr_capture_maxbytes=1MB   ; 这个一样,和stdout_capture一样。 默认为0,关闭状态
;stderr_events_enabled=false   ; 这个也是一样,默认为false
;environment=A="1",B="2"       ; 这个是该子进程的环境变量,和别的子进程是不共享的
;serverurl=AUTO                ; 

; 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] ;这个东西其实和program的地位是一样的,也是suopervisor启动的子进
                                       程,不过它干的活是订阅supervisord发送的event。他的名字就叫
                                       listener了。我们可以在listener里面做一系列处理,比如报警等等
                                       楼主这两天干的活,就是弄的这玩意
;command=/bin/eventlistener    ; 这个和上面的program一样,表示listener的可执行文件的路径
;process_name=%(program_name)s ; 这个也一样,进程名,当下面的numprocs为多个的时候,才需要。否则默认就
                                 OK了
;numprocs=1                    ; 相同的listener启动的个数
;events=EVENT                  ; event事件的类型,也就是说,只有写在这个地方的事件类型。才会被发送


;buffer_size=10                ; 这个是event队列缓存大小,单位不太清楚,楼主猜测应该是个吧。当buffer
                                 超过10的时候,最旧的event将会被清除,并把新的event放进去。
                                 默认值为10。。非必须选项
;directory=/tmp                ; 进程执行前,会切换到这个目录下执行
                                 默认为不切换。。。非必须
;umask=022                     ; 淹没,默认为none,不说了
;priority=-1                   ; 启动优先级,默认-1,也不扯了
;autostart=true                ; 是否随supervisord启动一起启动,默认true
;autorestart=unexpected        ; 是否自动重启,和program一个样,分true,false,unexpected等,注意
                                  unexpected和exitcodes的关系
;startsecs=1                   ; 也是一样,进程启动后跑了几秒钟,才被认定为成功启动,默认1
;startretries=3                ; 失败最大尝试次数,默认3
;exitcodes=0,2                 ; 期望或者说预料中的进程退出码,
;stopsignal=QUIT               ; 干掉进程的信号,默认为TERM,比如设置为QUIT,那么如果QUIT来干这个进程
                                 那么会被认为是正常维护,退出码也被认为是expected中的
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
;killasgroup=false             ; SIGKILL the UNIX process group (def false)
;user=chrism                   ;设置普通用户,可以用来管理该listener进程。
                                默认为空。。非必须设置
;redirect_stderr=true          ; 为true的话,stderr的log会并入stdout的log里面
                                默认为false。。。非必须设置
;stdout_logfile=/a/path        ; 这个不说了,好几遍了
;stdout_logfile_maxbytes=1MB   ; 这个也是
;stdout_logfile_backups=10     ; 这个也是
;stdout_events_enabled=false   ; 这个其实是错的,listener是不能发送event
;stderr_logfile=/a/path        ; 这个也是
;stderr_logfile_maxbytes=1MB   ; 这个也是
;stderr_logfile_backups        ; 这个不说了
;stderr_events_enabled=false   ; 这个也是错的,listener不能发送event
;environment=A="1",B="2"       ; 这个是该子进程的环境变量
                                 默认为空。。。非必须设置
;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分组,划分到组里面的program。我们就不用一个一个去操作了
                         我们可以对组名进行统一的操作。 注意:program被划分到组里面之后,就相当于原来
                         的配置从supervisor的配置文件里消失了。。。supervisor只会对组进行管理,而不再
                         会对组里面的单个program进行管理了
;programs=progname1,progname2  ; 组成员,用逗号分开
                                 这个是个必须的设置项
;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]                         ;这个东西挺有用的,当我们要管理的进程很多的时候,写在一个文件里面
                                    就有点大了。我们可以把配置信息写到多个文件中,然后include过来
;files = relative/directory/*.ini

OK,上边提到的非必须安装项,一般的话,都是有暗中认可值的,可以依照本身的须要去设置。。。假设不安装的,supervisor也能用起来

2、supervisorctl

program 配置

地点我们已经把 supervisrod
运维起来了,现在得以添加大家要保管的进程的安顿文件。能够把装有配置项都写到
supervisord.conf 文件里,但并不引进那样做,而是通过 include
的不二等秘书诀把分化的顺序(组)写到分化的配置文件里。
为了举例,大家新建3个目录 /etc/supervisor/
用于存放这个安插文件,相应的,把 /etc/supervisord.conf 里 include
部分的的配备修改一下:

[include]
files = /etc/supervisor/*.conf

若是有个用 Python 和 Flask 框架编写的用户基本系统,取名 usercenter,用
gunicorn
(http://gunicorn.org/)
做 web 服务器。项目代码位于 /home/leon/projects/usercenter,gunicorn
配置文件为
gunicorn.py,WSGI
callable 是 wsgi.py 里的
app 属性。所以一贯在命令行运转的措施可能是那样的:

cd  /home/leon/projects/usercenter
gunicorn -c gunicorn.py wsgi:app

近期编写一份配置文件来治本那个历程(必要留意:用 supervisord
管理时,gunicorn 的 daemon 选项须求安装为 False):

[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = leon          ; 用哪个用户启动
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere

1份配置文件至少须要3个 [program:x] 部分的配备,来告诉 supervisord
要求管住拾叁分进度。[program:x] 语法中的 x 表示 program
name,会在客户端(supervisorctl 或 web 界面)突显,在 supervisorctl
中通过这些值来对先后开始展览 start、restart、stop 等操作。

一声令下行客户端程序,它提供一个接近 shell 的接口,通过 UNIX 域套接字可能TCP 套接字并使用 XML_PRADOPC 协议与 supervisord
进度展开数据通信。它的重要成效是管理(运维,关闭,重启,查看情形)子进度。

使用 supervisorctl

Supervisorctl 是 supervisord 的3个指令行客户端工具,运转时须求钦命与
supervisord 使用相同份配置文件,不然与 supervisord
1样根据顺序查找配置文件。

supervisorctl -c /etc/supervisord.conf

地方这么些命令会进入 supervisorctl 的 shell
界面,然后能够实行不一的一声令下了:

$ supervisorctl status
$ supervisorctl stop usercenter
$ supervisorctl start usercenter
$ supervisorctl restart usercenter
$ supervisorctl reread
$ supervisorctl update

3、Web Server

兑今后界面上管理进度,还能够查看进度日志和平解决除日志。

4、XML-RPC 接口

能够由此 XML_昂科威PC 协议对 supervisord 举行远程管理,达到和 supervisorctl
以及 Web Server 一样的管理效果。

进程被 Supervisor 管理后,其运营情状的转账图如下图 1 所示:

美高梅手机版4858 1

图 一 :子进度情状转移图

大家挑多少个至关心重视要的历程情况来证实。

  • running:进度处于运维处境
  • starting:Supervisor 收到运维请求后,进度处姜伟在运转进程中
  • stopped:进程处于关闭状态
  • stopping:Supervisor 收到关闭请求后,进度处王丽萍在关闭进度中
  • backoff:进度进入 starting 状态后,由于当时就淡出造成没能进入
    running 状态
  • fatal:进度没有平常运行
  • exited:过程从 running 状态退出

尚未接触过 Supervisor
的意中人可能对地点的叙说感到有些无的放矢,不用操心,经过上边包车型大巴举办后,会快捷通晓Supervisor 涉及的那一个名词的。

Supervisor 初体验

大家以 CentOS 平台下为例,表明如何使用 Supervisor
那一强大的进度管理工科具。

1. 安装

能够运用easy_intall来安装 Supervisor:

easy_install supervisor

也得以动用pip来安装 Supervisor:

pip install supervisor

安装进度相比较简单,此处大家不再赘述。

设置收尾后,能够运用以下命令来测试安装是还是不是中标:

echo_supervisord_conf

echo_supervisord_conf将会在巅峰输出 Supervisor 配置的样例。

二. 创设布局目录以及主配置文件

为了将 Supervisor 的布局放置到独门的目录中,我们先成立目录:

cd /etc
mkdir supervisor

随着,能够继承应用echo_supervisord_conf命令,将 Supervisor
样例配置重定向输出到文件文件中:

echo_supervisord_conf > /etc/supervisor/supervisord.conf

如此那般,我们便生成了 Supervisor 的主配置文件supervisord.conf。

为了将 Supervisor
管理的经过配置与主配置文件分别开来,我们创造独立的目录来存放在进度配置。

cd /etc/supervisor
mkdir conf.d

接下来,修改主配置文件 supervisord.conf,添加以下配置,将 conf.d
目录下的进程配置引入 Supervisor 管理:

[include]
files = ./conf.d/*.ini

三. 创设管理进程

为便宜测试 Supervisor 的机能,我们编辑以下 python 脚本,并保存为
hello.py。

import time
import sys
while True:
  print("hello\n")
  sys.stdout.flush()
  time.sleep(1)

hello.py 的主要功效是往专业输出中不止地出口 “hello” 字符串。

四. 开立进度配置

为将 hello.py 脚本被 Supervisor 接管,我们在 /etc/supervisor/conf.d
目录创制其配置 hello.ini:

[program:hello]
command=python /home/lihao/codes/python/hello.py    
stdout_logfile=/home/lihao/codes/python/hello.log
stderr_logfile=/home/lihao/codes/python/hello_error.log
  • command:运维进度使用的通令
  • stdout_logfile:钦命专业输出文件
  • stderr_logfile:标准错误输出文件

急需建议的是,被 Supervisor 管理的经过,不可能运用 daemon
方式,而必须在前台运维,不然会报错。

5. 运行 supervisord

鉴于我们要求选取内定目录下的 Supervisor 主配置文件,在运行 Supervisord
时,必要利用-c参数来钦定主配置文件的门道:

supervisord -c /etc/supervisor/supervisord.conf

6. 利用 supervisorctl 管理过程

应用 supervisorctl 可以查看监察和控制的进程意况:

supervisorctl -c /etc/supervisor/supervisord.conf

输出:

hello RUNNING pid 8475, uptime 7:59:46
supervisor>

能够旁观,脚本 hello.py 已经运维了四起(当然使用 ps aux | grep
hello也足以看出其进程新闻)。打开文件
/home/lihao/codes/python/hello.log,能够看到文件中穿梭有”hello”输出。

在 supervisorctl
命令行下,也能够选拔start,stop,restart,status,等一声令下来运行,关闭,重启,查看情状监察和控制的经过,也能够输入help来查阅命令支持。限于篇幅,此处不再实行,详细的
supervisorctl
命令能够参见:。

Supervisor 管理 Redis 进程

在说完 Supervisor 的主导采纳后,大家来看下怎样选取 Supervisor 来治本
Redis 进度。

Redis 的 Supervisor 配置

有了地点的功底,我们很不难写出 Redis 服务进度的 Supervisor 配置:

[program:redis]
command=/usr/local/bin/redis-server
autostart=true
autorestart=true
startsecs=3

利用 supervisorctl reload 载入新的 Redis 配置后,Redis 进度便让
Supervisor 运营了4起。假若急需钦命 Redis
的输出日志,能够通过stdout_logfile配置选项钦赐,具体也得以参照上述的
hello 例子。

是因为 Supervisor 管理的历程不能够安装为 daemon 格局,故要是 Redis
不能够平常运转,能够查看一下 Redis 的配备,并将daemonize选项设置为 no。

daemonize no

Supervisord 开机运行

为了处理机器宕机重启的状态,Redis
服务进程供给完结机械重启后活动重启的功力。 为此,必要安插 supervisord
进度随着机器开动而运行。要兑现这一目标 ,能够在 /etc/init 目录下添加
supervisord.conf 文件:

description  "supervisord"
start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec supervisord -n -c /etc/supervisor/supervisord.conf

诸如此类,每当机重视启后,supervisord
进程都会自行运维起来,防止机器每回重启后都急需手工业运维 supervisord
进程的操作。Supervisord
进度运转后,接下去会将其管理的经过自动地运行起来。这样,便达成了被
Supervisor
管理的长河随着机器开动而运营的功力。读者能够自行在测试机器上测试一下。

Supervisor Web 管理界面

若是须求打开 Web
管理界面功用,须求在supervisord.conf配置中添加以下配置:

[inet_http_server]
port=*:9001
username=user
password=123

接下来,打开浏览器,输入地方

Supervisor 提供的历程管理界面。

美高梅手机版4858 2

图 二 :Supervisor Web 管理界面

在此界面下,能够对单个进度展开重启,关闭,查看日志等操作,也得以对全数的进程展开重启,关闭等操作。

总结

以上正是那篇作品的全体内容了,希望本文的剧情对我们的读书只怕干活能推动一定的支援,假诺有疑难大家能够留言交换,多谢大家对剧本之家的支持。

参考资料

  • Python Web 开发实战,董伟明著,电子工业出版社

你可能感兴趣的篇章:

  • nodejs
    图解express+supervisor+ejs的用法(推荐)
  • python进程管理工科具supervisor的安装与应用教程
  • centos7使用supervisor的详实教程
  • PHP框架Laravel中达成supervisor执行异步进度的主意
  • PHP程序员玩转Linux体系使用supervisor完毕守护进度
  • 基于Python
    的经过管理工科具supervisor使用指南
  • Python使用Supervisor来治本进度的方法
  • Mac下Supervisor进程监察和控制管理工科具的设置与布置
  • node.js开发中选取Node
    Supervisor完成监测文件修改并自行重启应用
  • python进度管理工科具supervisor使用实例
  • 使用Python的Supervisor举办进度监察和控制以及电动运维
  • 详解supervisor使用教程

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有