内容简介:Supervisord实践
Supervisor是一个C/S模式的系统,它主要就是用来帮助客户控制类UNIX系统的进程。Supervisord管理进程有个要求:就是管理的程序是非daemon程序,然后Supervisord会自动把进程转换成daemon进程。因此如果我想使用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。本文重点讲述
二、Supervisor安装
三、Supervisord配置文件
Supervisor的配置文件叫做 supervisors.conf
,这个文件被 supervisord
和 supervisorctl
共同使用。如果一个应用启动的时候没有带上参数 -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
进行测试,这个命令默认会输出一个配置文件内容,我们可以重定向到一个你想要的配置文件中。效果如下(截取部分内容):
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_server
和 inet_http_server
两个配置项,每个配置文件只能配置一个。一般才生产环境,使用 unix_http_server
更合适一些。
Section Values
[inet_http_server] port = 127.0.0.1:9001 username = user password = 123
使用这种配置,可以通过浏览器控制进程,具体WEB界面如下所示。
[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。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- vue项目实践004~~~一篮子的实践技巧
- HBase实践 | 阿里云HBase数据安全实践
- Spark 实践:物化视图在 SparkSQL 中的实践
- Spark实践|物化视图在 SparkSQL 中的实践
- HBase实践 | 数据人看Feed流-架构实践
- Kafka从上手到实践-实践真知:搭建Zookeeper集群
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。