Supervisord实践

栏目: 服务器 · 发布时间: 7年前

内容简介:Supervisord实践

Supervisor是一个C/S模式的系统,它主要就是用来帮助客户控制类UNIX系统的进程。Supervisord管理进程有个要求:就是管理的程序是非daemon程序,然后Supervisord会自动把进程转换成daemon进程。因此如果我想使用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。本文重点讲述

二、Supervisor安装

Supervisord官方安装文档

三、Supervisord配置文件

Supervisor的配置文件叫做 supervisors.conf ,这个文件被 supervisordsupervisorctl 共同使用。如果一个应用启动的时候没有带上参数 -c (这个参数主要是设置配置文件的精确名称),那么应用程序将按照如下的顺序去寻找配置文件,并且使用找到的第一个配置文件。

$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
../etc/supervisord.conf (Relative to the executable)
../supervisord.conf (Relative to the executable)

3.1、supervisor配置文件生成

成功安装supervisord后,可以使用命令 echo_supervisord_conf 进行测试,这个命令默认会输出一个配置文件内容,我们可以重定向到一个你想要的配置文件中。效果如下(截取部分内容):

Supervisord实践

3.2、配置文件格式

supervisord.conf 是一个 Windows-INI-style (Python ConfigParser) file 。配置文件包含secitons(每个section通过 [header] 表示),并且每个配置文件由 key/value 组成。具体 sections 和他们的取值下个小节会描述。

3.3、supervisord配置文件模块介绍

[unix_http_server]

这个配置项主要就是配置基于UNIX域套接字的HTTP服务,如果没有这个配置项,那么基于UNIX域的HTTP服务将不会启动。

Section Values

[unix_http_server]
file = /tmp/supervisor.sock    ; Required:No  表示UNIX域套接字的路径,supervisor监听HTTP/XML-
                               ; RPC的请求。supervisorctl通过这个套接字和 ; supervisord进行通信
                             
chmod = 0777                   ; Required:No  改变权限
                               ; Default:0700
                               
chown= nobody:nogroup          ; Default: Use the username and group of the user who 								   ; starts supervisord.
							   ; Required: No.
							   
username = user 			   ; The username required for authentication to this HTTP 								   ; server.
							   ; Default: No username required.
							   ; Required: No.
password = 123

[inet_http_server]

这个配置项的作用和 unix_http_server 作用类似,只不过是通过TCP套接字通信。 unix_http_serverinet_http_server 两个配置项,每个配置文件只能配置一个。一般才生产环境,使用 unix_http_server 更合适一些。

Section Values

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

使用这种配置,可以通过浏览器控制进程,具体WEB界面如下所示。

Supervisord实践

[supervisorctl]

这个配置主要就是为 supervisorctl shell编程。

Section Values

[supervisorctl]
serverurl = unix:///tmp/supervisor.sock		;  The URL that should be used to access the 											 ;  supervisord server, e.g. 															;  http://localhost:9001. For UNIX domain 												;  sockets, use 																		;  unix:///absolute/path/to/file.sock.
											; 这个配置项的内容取决于前面介绍的两个配置。
											
username = chris                          	;  Required: No.
password = 123								;  Required: No.
prompt = mysupervisor						;  Required: No.

[supervisord]

这个配置主要就是一些全局设置,主要就是和supervisord进程相关。

Section Values :如下配置基本就可以满足工作中的大部分要求,其他的一些配置后面会介绍。

[supervisord]
logfile=/app/logs/supervisord/supervisord_di.log   ; (main log file;default 															   ; $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (logging level;default info; others: debug,warn)
pidfile=/app/logs/supervisord/supervisord_di.pid   ; (supervisord pidfile;default supervisord.pid)
nodaemon=false             ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

[rpcinterface:x]

Section Values

该配置默认使用形式如下所示:

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:x]

配置文件中包含一个或者多个 [program] ,这个配置项主要就是让supervisor知道哪个程序应该启动和控制。这个配置项的属性很多,根据实际项目中使用的频率,对配置项属性进行介绍,大部分配置可以使用默认值。

Section Values

[program:cat]
command=python taskd.py excel    ;当该program启动的时候,将会执行这个命令。
process_name=%(program_name)s_%(process_num)02d  ;当numprocs>1时,要有process_num
numprocs=1
directory=/data/application/service/bdp/bdp-di/online/service/src/server ; 执行的命令的目录
umask=022
priority=999
autostart=true
autorestart=unexpected
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
stopasgroup=false
killasgroup=false
user=chrism
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
stderr_events_enabled=false
environment=A="1",B="2"
serverurl=AUTO

[include]

配置文件可能会包含 [include] ,这个配置项声明了其他的配置文件。

[include]
files = /an/absolute/filename.conf /an/absolute/*.conf foo.conf config??.conf

[group]

这个配置主要就是将过个 program 归结为一个单元,这样方便同类进程的控制。

Section Values

[group:foo]
programs=bar,baz    ; program的名字
priority=999

四、Supervisord管理

Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:

1、supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
2、supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
3、supervisorctl start programxxx,启动某个进程
4、supervisorctl restart programxxx,重启某个进程
5、supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
6、supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
7、supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
8、supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

注意:
1、显示用stop停止掉的进程,用reload或者update都不会自动重启。
2、groupworker: 后面的冒号一定要有

下面贴出自己工作项目中使用到的supervisord配置文件

[unix_http_server]          ; supervisord的unix socket服务配置
file=/app/logs/supervisord/supervisord_di.sock    ; socket文件的保存目录

[supervisord]
logfile=/app/logs/supervisord/supervisord_di.log   ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (logging level;default info; others: debug,warn)
pidfile=/app/logs/supervisord/supervisord_di.pid   ; (supervisord pidfile;default supervisord.pid)
nodaemon=false             ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///app/logs/supervisord/supervisord_di.sock ; use a unix:// URL for a unix socket

[program:di_server]
command=python di_server.py
directory=/data/application/service/bdp/bdp-di/online/service/src/server
autorestart=true            ; retstart at unexpected quit (default: true)
startretries=10
stopwaitsecs=1             ; max num secs to wait before SIGKILL (default 10)
stopsignal=TERM
stdout_logfile=/app/logs/bdp-di/boot.log
stderr_logfile=/app/logs/bdp-di/boot_err.log
logfile_maxbytes=50MB

[program:task_sogou]
command=python taskd.py sogou
directory=/data/application/service/bdp/bdp-di/online/service/src/server
process_name=%(program_name)s_%(process_num)02d
numprocs=10
autorestart=true
startretries=10
stopwaitsecs=1
stopsignal=TERM
log_stdout=true
log_stderr=true
logfile=~/di_log
logfile_maxbytes=50MB

[program:task_qihu]
command=python taskd.py qihu
directory=/data/application/service/bdp/bdp-di/online/service/src/server
process_name=%(program_name)s_%(process_num)02d
numprocs=5
autorestart=true
startretries=10
stopwaitsecs=1
stopsignal=TERM
log_stdout=true
log_stderr=true
logfile=~/di_log
logfile_maxbytes=50MB

[group:di_task]
programs=task_qihu,task_sogou,

有很多program,这里只截取部分program。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

微信思维

微信思维

谢晓萍 / 羊城晚报出版社 / 2014-11 / 49

微信团队&萤火科技联合策划 一部记录微信如何渗入商业血脉,推动社会进化的力作一起来看看 《微信思维》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码