上文 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 | [unix_http_server] |
section: supervisord
1 | logfile=/tmp/supervisord.log ; 主日志文件,默认是:$CWD/supervisord.log |
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)