Supervisor配置详解
supervisord.conf后台进程配置
这里通常保持默认即可
子进程(被supervisor所管理的进程)配置
program组
[program: xxxx]
配置要管理的子进程的唯一名字process_name
进程名,默认值是%(program_name)s
,通常当numprocs
为多个时需要设置此项来为每个子进程实例设置一个不同的名字标识command
进程的启动命令numprocs
启动进程的数量,当不为1时,就是进程池的概念,默认为1directory
进程运行前,会先切换到这个目录,默认不设置umask
进程掩码,默认为nonepriority
进程优先级,优先级低的,在启动时会被先启动,而关闭时会被后关闭。默认值为999autostart
是否跟随supervisord进程自动启动,设置为true时,在supervisord启动后会被自动自动,默认为trueautorestart
设置子进程在意外退出时自动重启的情况。
- false:无论什么情况下都不会被重新启动
- unexpected:当进程的退出码不在exitcodes的定义中时,才会被重新启动
- true:无条件重启exitcodes
当autorestart=unexpected
时,如果进程的退出码在这里有定义,则进程不会被自动重启,可以通过逗号分割来设置多个退出码startsecs
设置子进程启动多少秒之后,该子进程的状态由STARTING变为RUNNING,即认为子进程已经被启动成功。默认为1startretries
当进程启动失败后,最大尝试启动的次数,默认值为3,即超过3次后,子进程的状态将会被标记为FAIL而不会继续重新启动stopsignal
进程停止信号,可以为TERM,INT,QUIT,KILL,USR1,SR2等。默认为TERM,当用设置的信号去关闭子进程时,退出码会被认为是expected,即不会重新启动子进程stopwaitsecs
默认为10,当我们向子进程发送stopsignal信号后,到系统返回信息给supervisord所等待的最大时间。超过这个时间后,supervisord会向该进子进程发送一个强制kill的信号。stopasgroup
当supervisord所管理的子进程下还有它自己的子进程时,如果仅仅关闭supervisord所管理的这个子进程的话,子进程的子进程就有可能会变成孤儿进程。这个时候就可以通过设置这个选项,把该子进程一级它下面的所有子进程都关掉。设置为true时,一般killasgroup也会被设置为true。该选项默认发送的信号为stop信号killasgroup
和上面的stopasgroup类似,不过这个选项发送的是kill信号user
如果supervisord是root启动,我们在这里设置一个非root用户,可以通过该用户来管理该program。默认不设置redirect_stderr
为true时,会将子进程输出到stderr中的日志也重定向到stdout中,默认为falsestdout_logfile
设置子进程stdout日志的输出路径,有三个可选值
- AUTO:随机找一个地方生成日志文件,并且当supervisord重新启动时,之前的日志文件将会被清空
- none:不输出日志文件
- 指定具体的路径stderr_logfile
类似于上面的stdout_logfile,这里设置stderr日志的输出路径stdout_logfile_maxbytes
单个日志文件的最大大小。默认为50MBstderr_logfile_maxbytes
类似于上面的stdout_logfile_maxbytesstdout_logfile_backups
一共保存的日志文件的数量,默认为10个stderr_logfile_backups
类似于上面的stdout_logfile_backupsstdout_capture_maxbytes
设定capture管道的大小,当值不为0的时候,子进程可以从stdout发送信息,而supervisor可以根据信息,发送对应的event。默认为0,即关闭管道stderr_capture_maxbytes
类似于上面的stdout_capture_maxbytesstdout_events_enabled
设置为true时,当子进程有stdout向文件描述符中写日志的时候,将触发supervisord发送PROCESS_LOG_STDOUT类型的event,默认为falsestderr_events_enabled
类似于上面的stdout_events_enabledenvironment
设置子进程的环境变量,和其它的子进程不共享。如A="a", B="b"serverurl
默认为AUTO
eventlistener组
[eventlistener: xxxxx]
时间监听名,这个东西和program的地位是一样的, 也是由supervisor启动的子进程,不过它的工作是负责订阅supervisord发送的event。可以在收到event时在这个子进程里面做一系列的处理command
和上面的program一样,表示listener的可执行文件的路径process_name
进程名,通常当numprocs为多个的时候需要设置此项numprocs
启动的listener的数量events
event事件的类型,也就是说,只有设置在这里的事件类型才会被发送buffer_size
event队列的缓存大小,如果超过这里设置的数量时,最旧的event将会被清楚,然后把新的event放进去directory
进程启动前将会切换到这里设置的目录。默认不设置umask
进程掩码,默认为nonepriority
启动优先级,默认为-1autostart
是否随着supervisord一起启动autorestart
同上startsecs
同上startretries
同上exitcodes
同上stopsignal
同上stopwaitsecs
同上stopasgroup
同上killasgroup
同上user
同上redirect_stderr
同上stdout_logfile
同上stdout_logfile_maxbytes
同上stdout_logfile_backups
同上stderr_logfile
同上
stderr_logfile_maxbytes
同上stderr_logfile_maxbytes
同上environment
同上serverurl
同上
group组
[group:xxxx]
给program分组,换分到组里面的program就可以通过group名来统一操作。当program被划分到组里面之后,就相当于原来的配置从supervisor的配置文件消失了。supervisor只会对组进行管理,而不会再对组里面的单个program进行管理了
programs
设置组成员,用逗号分开priority
组和组之间的优先级
include组
[include]
引入其它配置文件
评论区