Supervisord实践

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

内容简介: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。


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

查看所有标签

猜你喜欢:

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

Tagging

Tagging

Gene Smith / New Riders / 2007-12-27 / GBP 28.99

Tagging is fast becoming one of the primary ways people organize and manage digital information. Tagging complements traditional organizational tools like folders and search on users desktops as well ......一起来看看 《Tagging》 这本书的介绍吧!

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

在线图片转Base64编码工具

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

多种字符组合密码