0%
supervisor使用#02#配置文件简单教程

上文 supervisor基本使用方法教程,我们重点了supervisor的基本使用方法,并未对它进行过多的展开。我们知道supervisor有三个重要的部分 supervisord、supervisorctl、inet_http_server 组成,但我认为隐藏在三部分后面的配置文件,才需要重点关注和学习,毕竟它控制着所有的表现属性。为了比较好的掌握supervisor的使用,本文我们对supervisor的配置文件进行重点分析。

配置文件生成

上文我们使用apt安装supervisor,它自带了基本可用的 /etc/supervisor/supervisord.conf 配置文件,但我们知道supervisor是python程序,完全可以使用pip安装。pip安装的程序,不会帮我们主动安装该配置文件。但它提供了一个 echo_supervisord_conf 程序,可以生成配置文件。
如果我们使用pip安装的程序,或者不小心删除了 /etc/supervisor/supervisord.conf ,我们使用方法如下生成该配置文件:

1
$ echo_supervisord_conf > ${path_for_supervisor}/supervisord.conf

在我的服务器上,基于supervisor-v4.2.1生成的配置文件,可点击查看

配置文件格式

supervisord.conf 文件采用ini语法,我们提取其主干,该文件主要有下面几个段组成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[unix_http_server]
file=/tmp/supervisor.sock ; the path to the socket file
...

[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface
...

[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
...

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

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
...

[program:theprogramname]
;command=/bin/cat ; the program (relative uses PATH, can take args)
...

[group:thegroupname]
;programs=progname1,progname2 ; each refers to 'x' in [program:x] definitions
...

[include]
;files = relative/directory/*.ini

section: supervisord

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
logfile=/tmp/supervisord.log ; 主日志文件,默认是:$CWD/supervisord.log
logfile_maxbytes=50MB ; 主日志文件的最大值,默认是50MB
logfile_backups=10 ; 主日志文件的数目,0代表无备文件,默认是10个滚动文件
loglevel=info ; 日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; pid文件,存储supervisord的pid
nodaemon=false ; 为true表示在前台启动亦即不是后台守护进程模式,默认是false即以daemon的方式运行
silent=false ; 为true表示不向标准打印日志,默认为false
minfds=1024 ; 可以打开的文件描述符的最小值,默认1024
minprocs=200 ; 可以打开的进程数的最小值,默认200
;umask=022 ; 默认的进程文件创建umask,默认为022
;user=supervisord ; supervisord运行用户名,推荐是root
;identifier=supervisor ; supervisord identifier, default is 'supervisor'
;directory=/tmp ; supervisord以守护进程运行的时候切换到这个目录
;nocleanup=true ; supervisord在启动的时候禁止清除已经存在的子进程日志文件,默认为false
;childlogdir=/tmp ; 自动启动的子进程的日志目录
;environment=KEY="value" ; 一个k/v对的list环境变量列表,子进程启动时传递给子进程
;strip_ansi=false ; 消除子进程日志文件中的转义序列

section: program

该段我们不建议写在主配置文件中,建议应当结合include段,将其放置到独立目录,然后由supervisord.conf文件 include 进来。
比如主配置文件为:/etc/supervisor/supervisord.conf,创建子进程配置文件夹:/etc/supervisor/conf.d,然后所有子进程文件放到该目录下。
比如有个子进程名称为 httpserver,我们创建其配置文件为:/etc/supervisor/conf.d/httpserver.conf。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[program:theprogramname]
;command=/bin/cat ; 启动程序命令,可以使用绝对路径或者相对路径,也可以带启动参数
;process_name=%(program_name)s ; 一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s
;numprocs=1 ; 进程启动数量,默认为1
;directory=/tmp ; 进程启动前进入的文件夹
;umask=022 ; 进程umask,默认为空
;priority=999 ; 权重,可以控制程序启动和关闭时的顺序,该值越小:越早启动,越晚关闭。默认值是999
;autostart=true ; 设置为ture表示随supervisor的启动而启动,默认为true
;startsecs=1 ; 程序启动后等待多少秒数后才认为程序启动成功,默认为1
;startretries=3 ; 启动一个程序失败后的最大尝试次数,默认为3,亦即共启动4次
;autorestart=unexpected ; 取值:false、true、unexpected。false:进程不自动重启,unexpected:当退出码不是exitcodes中定义的时,进程会重启。true:进程退出后会无条件重启。
;exitcodes=0 ; autorestart预期的退出返回码,默认是0。
;stopsignal=QUIT ; 用来杀掉当前进程的信号,默认是TERM信号,也可以是HUP,INT,QUIT,KILL,USR1,USR2。
;stopwaitsecs=10 ; 操作系统给当前进程发送SIGKILL信号之前,等待的秒数,默认为10。
;stopasgroup=false ; 为true,则会使supervisor发送停止信号到整个进程组,默认为false。
;killasgroup=false ; 为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。
;user=chrism ; 以该用户来运行当前程序
;redirect_stderr=true ; 为true,将stderr定向到to stdout (default false)
;stdout_logfile=/a/path ; 进程标准输出指向该文件
;stdout_logfile_maxbytes=1MB ; 标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小。默认50M。
;stdout_logfile_backups=10 ; 标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份
;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; 将stdout输出,带上进程名字发送给syslog, 默认为false
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; 将stderr输出,带上进程名字发送给syslog, 默认为false
;environment=A="1",B="2" ; 附加的进程环境变量 以k/v 列表的形式
;serverurl=AUTO ; override serverurl computation (childutils)

参考资料