监理单位可以用 supervisor吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监理单位可以用 supervisor吗相关的知识,希望对你有一定的参考价值。

参考技术A Supervisor是一个C/S系统,它允许用户在类UNIX系统上控制一些进程。它具有以下特性:1简单Supervisor通过INI格式配置文件进行配置,很容易掌握,它为每个进程提供了很多配置选项,可以使你很容易的重启进程或者自动的轮转日志。2统一Supervisor提供了一种统一的方式来start、stop、monitor你的进程,进程可以单独控制,也可以成组的控制。你可以在本地或者远程命令行或者web接口来配置Supervisor。3有效Supervisor通过fork/exec启动它的子进程,子进程并不是守护进程。当一个进程终止的时候,操作系统会立即给Supervisor发送一个信号,而不是像其他解决方案依赖PID文件。4可扩展Supervisor包含一个简单的事件通知协议,因此任何程序都可以监控它,而且提供一个XML-RPC控制接口。5兼容除了windows平台,其他平台都可运行。Supervisor系统的组件:supervisord:服务会启动supervisord服务,它负责调用自己启动子程序,响应来自客户端的命令,重启crash或者退出的进程,记录进程的输出信息,收集事件信息。该服务的配置文件在/etc/supervisor/supervisord.confsupervisorctl:客户端的命令行工具,提供一个类shell接口,通过它你可以连接到不同的supervisord进程上来管理它们各自的子程序。客户端命令通过UNIXsocket或者TCP来和服务通讯,服务端可以要求客户端提供身份验证之后才能进行操作([supervisorctl])。WebServer:一个小的web接口被集成进了supervisorctl,重启supervisord之后就可以访问了([inet_http_server])。XML-RPCInterface:就像HTTP提供WEBUI一样,同时还提供了XML-RPC接口来控制supervisor和由它运行的程序。安装:supervisor是python编写的,显然用easy_install、pip都可以安装,我懒,直接apt-get了,在ubuntu14.04下安装完后版本是3.0b2。Supervisor服务的启动其实启动Supervisor很简单,supervisord-h看看就知道了,最简单的-c根配置文件即可:复制代码代码如下:supervisord--runasetofapplicationsasdaemons.Usage:/usr/bin/supervisord[options]Options:-c/--configurationFILENAME--configurationfile-n/--nodaemon--runintheforeground(sameas'nodaemontrue'inconfigfile)-h/--help--printthisusagemessageandexit-v/--version--printsupervisordversionnumberandexit-u/--userUSER--runsupervisordasthisuser(ornumericuid)-m/--umaskUMASK--usethisumaskfordaemonsubprocess(defaultis022)-d/--directoryDIRECTORY--directorytochdirtowhendaemonized-l/--logfileFILENAME--useFILENAMEaslogfilepath-y/--logfile_maxbytesBYTES--useBYTEStolimitthemaxsizeoflogfile-z/--logfile_backupsNUM--numberofbackupstokeepwhenmaxbytesreached-e/--loglevelLEVEL--useLEVELasloglevel(debug,info,warn,error,critical)-j/--pidfileFILENAME--writeapidfileforthedaemonprocesstoFILENAME-i/--identifierSTR--identifierusedforthisinstanceofsupervisord-q/--childlogdirDIRECTORY--thelogdirectoryforchildprocesslogs-k/--nocleanup--preventtheprocessfromperformingcleanup(removalofoldautomaticchildlogfiles)atstartup.-a/--minfdsNUM--theminimumnumberoffiledescriptorsforstartsuccess-t/--strip_ansi--stripansiescapecodesfromprocessoutput--minprocsNUM--theminimumnumberofprocessesavailableforstartsuccess--profile_optionsOPTIONS--runsupervisordunderprofilerandoutputresultsbasedonOPTIONS,whichisacomma-sep'dlistof'cumulative','calls',and/or'callers',e.g.'cumulative,callers')不过既然我这懒人是用apt-get安装的,那安装包的规范必然符合debian系的风格了,直接servicesupervisorstart即可启动,且慢,我们还没配置supervisor的配置文件呢,启动了也没什么效果。我们后面详解配置文件的配置。supervisorctl客户端的使用supervisorctl有两种模式,一种是交互模式,一种是命令行模式。在命令行输入supervisorctl直接回车,即可进入交互模式。复制代码代码如下:supervisorctl--controlapplicationsrunbysupervisordfromthecmdline.Usage:/usr/bin/supervisorctl[options][action[arguments]]Options:-c/--configuration--configurationfilepath(default/etc/supervisor.conf)-h/--help--printusagemessageandexit-i/--interactive--startaninteractiveshellafterexecutingcommands-s/--serverurlURL--URLonwhichsupervisordserverislistening(default"").-u/--username--usernametouseforauthenticationwithserver-p/--password--passwordtouseforauthenticationwithserver-r/--history-file--keepareadlinehistory(ifreadlineisavailable)复制代码代码如下:action[arguments]--seebelowActionsarecommandslike"tail"or"stop".If-iisspecifiedornoactionisspecifiedonthecommandline,a"shell"interpretingactionstypedinteractivelyisstarted.Usetheaction"help"tofindoutaboutavailableactions.Supervisor的开机自启动如果你是pip或者easy_install安装的,开机服务自启动还真是个麻烦事,不过官方已经给出一些rc.d脚本示例了,在github上,不过由于我是apt-get安装的,显然这个开机自启动是不用担心的,用debian的update-rc.d即可搞定。Supervisor的进程安全既然是用Supervisor来保证其他进程的正常运行,但是万一Supervisor进程挂了怎么,我们可以使用daemontools来保证Supervisor正常运行,就类似于监控的监控。supervisord的配置文件主要由几个配置段构成,配置项以K/V格式呈现,下面就看看各个配置端需要怎样配置:[unix_http_server]在该配置块的参数项表示的是一个监听在socket上的HTTPserver,如果[unix_http_server]块不在配置文件中,则不会启动基于socket的HTTPserver。file:一个unixdomainsocket的文件路径,HTTP/XML-RPC会监听在这上面chmod:在启动时修改unixdomainsocket的modechown:修改socket文件的属主username:HTTPserver在认证时的用户名password:认证密码eg:复制代码代码如下:[unix_http_server]file=/tmp/supervisor.sockchmod=0777chown=nobody:nogroupusername=userpassword=123[inet_http_server]在该配置块的参数项表示的是一个监听在TCP上的HTTPserver,如果[inet_http_server]块不在配置文件中,则不会启动基于TCP的HTTPserver。port:TCP监听的地址和端口(ip:port),这个地址会被HTTP/XML-RPC监听username:HTTPserver在认证时的用户名password:认证密码eg:复制代码代码如下:[inet_http_server]port=127.0.0.1:9001username=userpassword=123[supervisord]该配置块的参数项是关于supervisord进程的全局配置项。logfile:log文件路径logfile_maxbytes:log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小logfile_backups:轮转日志备份的数量,默认是10,如果设置为0,则不备份loglevel:error、warn、info、debug、trace、blather、criticalpidfile:pid文件路径umask:umask值,默认022nodaemon:如果设置为true,则supervisord在前台启动,而不是以守护进程启动minfds:supervisord在成功启动前可用的最小文件描述符数量,默认1024minprocs:supervisord在成功启动前可用的最小进程描述符数量,默认200nocleanup:防止supervisord在启动的时候清除已经存在的子进程日志文件childlogdir:自动启动的子进程的日志目录user:supervisord的运行用户directory:supervisord以守护进程运行的时候切换到这个目录strip_ansi:消除子进程日志文件中的转义序列environment:一个k/v对的list列表eg:复制代码代码如下:[supervisord]logfile=/tmp/supervisord.loglogfile_maxbytes=50MBlogfile_backups=10loglevel=infopidfile=/tmp/supervisord.pidnodaemon=falseminfds=1024minprocs=200umask=022user=chrismidentifier=supervisordirectory=/tmpnocleanup=truechildlogdir=/tmpstrip_ansi=falseenvironment=KEY1="value1",KEY2="value2"[supervisorctl]该配置块参数是关于supervisorctlserverurl:这个url是用来访问supervisord服务的(),或者是个sockets文件(unix:///absolute/path/to/file.sock)username:supervisorctl连接supervisord的认证用户password:认证密码prompt:默认是supervisorhistory_file:history文件路径eg:复制代码代码如下:[supervisorctl]serverurl=unix:///tmp/supervisor.sockusername=chrispassword=123prompt=mysupervisor[program:x]该配置块包含一个或者多个program段,program来表明supervisord要控制哪些程序。该配置块的头部是有固定格式的,一个关键字program,后面跟着一个冒号,接下来才是程序名。例如:[program:foo],foo就是程序名,在使用supervisorctl来操作程序的时候,就是以foo来标明的。command:启动程序使用的命令,可以是绝对路径或者相对路径process_name:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)snumprocs:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1numprocs_start:一个int偏移值,当启动实例的时候用来计算numprocs的值priority:权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999autostart:如果设置为true,当supervisord启动的时候,进程会自动重启。autorestart:值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。startsecs:程序启动后等待多长时间后才认为程序启动成功startretries:supervisord尝试启动一个程序时尝试的次数。默认是3exitcodes:一个预期的退出返回码,默认是0,2。stopsignal:当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是HUP,INT,QUIT,KILL,USR1,orUSR2。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:当进程处于stderrcapturemode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GBstdout_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发stderr_logfile:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为truestderr_logfile_maxbytes:错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小stderr_logfile_backups:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份stderr_capture_maxbytes:当进程处于stderrcapturemode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GBstderr_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发environment:一个k/v对的list列表directory:supervisord在生成子进程的时候会切换到该目录umask:设置进程的umaskserverurl:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url

以上是关于监理单位可以用 supervisor吗的主要内容,如果未能解决你的问题,请参考以下文章

supervisor部署tornado

Supervisor 的配置与使用

Supervisor使用教程

supervisor 的使用 (fastcgi管理)

用python做web开发,tornado 如何部署,都是用nginx+supervisor吗

docker-9 supervisord 参考docker从入门到实战