supervisor系列:3、配置文件
文章目录
Supervisor配置文件按照惯例命名为
supervisord.conf
,它被
supervisord和
supervisorctl使用。如果任何一个应用程序启动时没有-c选项(该选项用于显式地告诉应用程序配置文件名),应用程序将在以下位置按照指定的顺序查找名为·supervisord.conf`的文件。它将使用第一个找到的文件。
../etc/supervisord.conf
(相对于可执行文件)../supervisord.conf
(相对于可执行文件)$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf
(从Supervisor 3.3.0开始)
注意:
许多针对Debian和Ubuntu的Supervisor打包版本都包含了一个补丁,将
/etc/Supervisord/Supervisord.conf
添加到搜索路径中。Supervisor的第一个包含它的PyPI包是Supervisor 3.3.0。
1. 文件格式
Supervisor.conf
是一个Windows-ini风格的(Python ConfigParser)文件。它有节(每个节由[header]
表示)和节中的键/值对。下面描述各节及其允许值。
1.1 环境变量
在启动supervisord时存在于环境中的环境变量可以在配置文件中使用Python字符串表达式语法%(ENV_X)s
:
[program:example]
command=/usr/bin/example --loglevel=%(ENV_LOGLEVEL)s
在上面的示例中,表达式%(ENV_LOGLEVEL)s
将被展开为环境变量LOGLEVEL
的值。
注意:
在Supervisor 3.2和更高版本中,
%(ENV_X)s
的表达式在所有选项中都被支持。在以前的版本中,有些选项支持它们,但大多数不支持。请参阅下面每个选项的文档。
2. [unix_http_server]
段设置
supervisord.conf
文件包含一个名为[unix_http_server]
的部分,在这个部分中应该插入监听UNIX域套接字的HTTP服务器的配置参数。如果配置文件没有[unix_http_server]
节,UNIX域套接字HTTP服务器将不会启动。允许的配置值如下所示。
2.1 [unix_http_server]
段的值
file
UNIX域套接字的路径,上级将在该套接字上侦听HTTP/XML-RPC请求。supervisorctl使用XML-RPC在这个端口上与supervisord进行通信。这个选项可以包括值
%(here)s
,它展开到找到supervisord配置文件的目录。默认值: None.
必选字段: No.
引自: 3.0
警告:echo_supervisord_conf输出的配置示例使用/tmp/supervisor.sock
作为套接字文件。该路径只是一个示例,可能需要更改为更适合您的系统的位置。有些系统会定期删除/tmp
中的旧文件。如果套接字文件被删除,那么supervisorctl将无法连接到supervisor。
chmod
在启动时将UNIX域套接字的UNIX权限模式位更改为此值。
默认值: 0700
必选字段: No.
引自: 3.0
chown
将套接字文件的用户和组更改为这个值。可能是一个UNIX用户名(例如
chrism
),或者用冒号分隔的UNIX用户名和组(例如chrism:wheel
)。默认值: 使用启动supervisord的用户名和组。
必选字段: No.
引自: 3.0
username
此HTTP服务器的身份验证所需的用户名。
默认值: 不需要用户名
必选字段: No.
引自: 3.0
password
向此HTTP服务器进行身份验证所需的密码。这可以是明文密码,或者如果前缀是字符串
{SHA}
,也可以指定为SHA-1哈希值。例如:{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d
为密码“thepassword”的SHA存储版本。注意,哈希密码必须是十六进制格式。
默认值: No password required.
必选字段: No.
引自: 3.0
2.2 [unix_http_server]
段的示例
[unix_http_server]
file = /tmp/supervisor.sock
chmod = 0777
chown= nobody:nogroup
username = user
password = 123
3. [inet_http_server]
段设置
supervisord.conf
文件包含一个名为[inet_http_server]
的部分,在这个部分中应该插入监听TCP (internet)套接字的HTTP服务器的配置参数。如果配置文件没有[inet_http_server]
节,inet HTTP服务器将不会启动。允许的配置值如下所示。
警告:
默认情况下,不启用inet HTTP服务器。如果您选择启用它,请阅读以下安全警告。inet HTTP服务器仅用于受信任的环境。它应该只绑定到本地主机,或者只能从一个隔离的、受信任的网络中访问。inet HTTP服务器不支持任何形式的加密。inet HTTP服务器默认不使用身份验证(参见username=
和password=
选项)。可以从supervisorctl远程控制inet HTTP服务器。它还提供一个web界面,允许启动或停止子流程,以及查看子流程日志。永远不要向公共互联网公开inet HTTP服务器。
3.1 [inet_http_server]
段的值
port
一个TCP主机:端口值或(例如
127.0.0.1:9001
),supervisor将在其上监听HTTP/XML-RPC请求。supervisorctl
将使用XML-RPC在这个端口上与supervisord
进行通信。要监听机器上的所有接口,请使用:9001
或*:9001
。请阅读以上安全警告。默认值: No default.
必选字段: Yes.
引自: 3.0
username
此HTTP服务器的身份验证所需的用户名。
默认值: No username required.
必选字段: No.
引自: 3.0
password
向此HTTP服务器进行身份验证所需的密码。这可以是明文密码,或者如果前缀是字符串
{SHA}
,也可以指定为SHA-1哈希值。例如:{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d
为密码“thepassword”的SHA存储版本。注意,哈希密码必须是十六进制格式。
默认值: 不需要密码
必选字段: No.
引自: 3.0
3.2 [inet_http_server]
段的示例
[inet_http_server]port = 127.0.0.1:9001username = userpassword = 123
4. [supervisord]
段设置
supervisord.conf
文件包含一个名为[supervisord]
的部分,其中应该插入与supervisord进程相关的全局设置。如下所示。
4.1 [supervisord]
段的值
logfile
supervisord进程的活动日志的路径。这个选项可以包括值
%(here)s
,它展开到找到监控器配置文件的目录。默认值:
$CWD/supervisord.log
必选字段: No.
引自: 3.0
注意:如果
logfile
被设置为不可查找的特殊文件,例如/dev/stdout
,则必须通过设置logfile_maxbytes = 0
来禁用日志循环。
logfile_maxbytes
活动日志文件在被循环覆盖之前可能消耗的最大字节数(后缀乘数如“KB”、“MB”和“GB”可以在值中使用)。将此值设置为0表示无限制的日志大小。
默认值: 50MB
必选字段: No.
引自: 3.0
logfile_backups
活动日志文件循环所产生的要保留的备份数量。如果设置为0,则不保留任何备份。
默认值: 10
必选字段: No.
引自: 3.0
loglevel
日志级别,指示向supervisord活动日志写入的内容。
critical(危急)
,error(错误)
,warn(警告)
,info(信息)
,debug(调试)
,trace(追踪)
, 或blather(废话)
之一。注意,在日志级别的debug
,supervisord日志文件将记录它的子进程的stderr/stdout输出和扩展的info关于进程状态变化的信息,这对于调试没有正常启动的进程是有用的。请参见:活动日志级别。默认值: info
必选字段: No.
引自: 3.0
pidfile
supervisord保存pid文件的位置。这个选项可以包括值
%(here)s
,它展开到找到supervisord配置文件的目录。默认值:
$CWD/supervisord.pid
必选字段: No.
引自: 3.0
umask
supervisord进程的掩码。
默认值: 022
必选字段: No.
引自: 3.0
nodaemon
如果为true,则supervisord将在前台启动,而不是daemonizing。
默认值: false
必选字段: No.
引自: 3.0
silent
如果为true且未被守护,日志将不会被定向到stdout。
默认值: false
必选字段: No.
引自: 4.2.0
minfds
成功启动supervisord之前必须可用的文件描述符的最小数目。将调用setrlimit,试图提高supervisord进程的软限制和硬限制,以满足
minfds
。硬限制只能在监督者作为root运行时被提高。supervisord可以自由地使用文件描述符,当无法从操作系统获取文件描述符时,它将进入故障模式,所以能够指定一个最小值以确保在执行期间不会耗尽它们是很有用的。这些限制将由托管子流程继承。这个选项在Solaris上特别有用,默认情况下每个进程的fd限制很低。默认值: 1024
必选字段: No.
引自: 3.0
minprocs
在supervisord成功启动之前必须可用的进程描述符的最小数量。将调用setrlimit,试图提高supervisord进程的软限制和硬限制,以满足
minprocs
。硬限制只能在监督者作为root运行时被提高。当操作系统的进程描述符用完时,supervisord将进入故障模式,所以在supervisord启动时确保有足够的进程描述符可用是很有用的。默认值: 200
必选字段: No.
引自: 3.0
nocleanup
防止supervisor在启动时清除任何现有的
AUTO
子日志文件。用于调试。默认值: false
必选字段: No.
引自: 3.0
childlogdir
用于
AUTO
子日志文件的目录。这个选项可以包括值%(here)s
,它展开到找到supervisord
配置文件的目录。默认值: value of Python’s tempfile.gettempdir()
必选字段: No.
引自: 3.0
user
进行任何有意义的处理之前,指示supervisord将用户切换到这个UNIX用户帐户。只有当supervisord以root用户启动时,用户才能进行切换。
默认值:不切换用户
必选字段:没有。
引自:3.0
3.3.4改变:如果不能切换到指定的用户,它将向stderr写入一条错误消息,然后立即退出。在早期版本中,它将继续运行,但将在临界级别记录一条消息。
directory
当supervisord守护时,切换到这个目录。这个选项可以包括值
%(here)s
,它展开到找到supervisord配置文件的目录。默认值: do not cd
必选字段: No.
引自: 3.0
strip_ansi
从子日志文件中删除所有ANSI转义序列。
默认值: false
必选字段: No.
引自: 3.0
environment
key ="val",KEY2="val2"
形式的键/值对列表,将被放置在所有子进程的环境中。这并没有改变supervisord自身的环境。这个选项可以包括值%(her)s
,它展开到找到supervisord配置文件的目录。包含非字母数字字符的值应该用引号括起来(例如,KEY ="val:123",KEY2="val,456"
)。否则,引用值是可选的,但推荐使用。要转义百分比字符,只需使用两个。(比如:URI="/first%%20name"
)请注意,子进程将继承shell的环境变量,用于启动supervised,除了这里覆盖的和程序的environment
选项内的变量。参见子进程环境变量默认值: no values
必选字段: No.
引自: 3.0
identifier
此管理进程的标识符字符串,由RPC接口使用。
默认值: supervisor
必选字段: No.
引自: 3.0
4.2 [supervisord]
段的示例
[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
nodaemon = false
minfds = 1024
minprocs = 200
umask = 022
user = chrism
identifier = supervisor
directory = /tmp
nocleanup = true
childlogdir = /tmp
strip_ansi = false
environment = KEY1="value1",KEY2="value2"
5. [supervisorctl]
段设置
配置文件可能包含supervisorctl交互式shell程序的设置。下面列出了这些选项。
5.1 [supervisorctl]
段的值
serverurl
应该用来访问supervisord服务器的URL,例如。“http://localhost:9001”。对于UNIX域套接字,使用’ UNIX:///absolute/path/to/file.sock '。
默认值:http://localhost:9001
必选字段: No.
引自: 3.0
username
传递给supervisord服务器用于身份验证的用户名。这应该与您试图访问的端口或UNIX域套接字的管理服务器配置中的’ username '相同。
默认值: No username
必选字段: No.
引自: 3.0
password
要传递给supervisord服务器用于身份验证的密码。这应该是您试图访问的端口或UNIX域套接字的supervisord服务器配置的“password”的明文版本。此值不能作为SHA散列传递。与此文件中指定的其他密码不同,它必须以明文形式提供。
默认值: No password
必选字段: No.
引自: 3.0
prompt
用作supervisorctl提示符的字符串。
默认值:
supervisor
必选字段: No.
引自: 3.0
history_file
用作
readline
持久化历史文件的路径。 如果您通过选择一个路径来启用这个特性,那么您的supervisorctl命令将保存在文件中,并且您可以使用readline(例如,向上箭头)来调用您在最后一个supervisorctl会话中执行的命令。默认值: No file
必选字段: No.
引自: 3.0a5
5.2 [supervisorctl]
段的示例
[supervisorctl]
serverurl = unix:///tmp/supervisor.sock
username = chris
password = 123
prompt = mysupervisor
6. [program:x]
段设置
配置文件必须包含一个或多个program
段,以便supervisord知道它应该启动和控制哪些程序。头值是复合值。它是单词“程序”,后面直接跟着一个冒号,然后是程序名。[program:foo]
的头值描述了一个名为" foo "的程序。该名称用于控制由于此配置而创建的进程的客户端应用程序中。创建没有名称的program
节是错误的。名称不能包含冒号或括号字符。名称的值用作%(program_name)s
字符串表达式在指定的其他值中展开的值。
注意:
一个[program:x]
部分实际上代表了一个“同质过程组”给supervisor(从3.0开始)。组的成员是由配置中的numprocs
和process_name
参数组合定义的。默认情况下,如果numprocs和process_name保持其默认值不变,则[program:x]
表示的组将被命名为x
,其中将有一个名为x
的进程。这提供了与旧的supervisor版本的少许向后兼容性,旧的supervisor版本没有将程序部分视为同构的过程组定义。
但是,例如,如果您有一个[program:foo]
区段,它的numprocs
为3,process_name
表达式为%(program_name)s_%(process_num)02d
,那么“foo”组将包含三个进程,分别命名为foo_00
、foo_01
和foo_02
。这使得使用一个[program:x]
节启动许多非常相似的进程成为可能。所有日志文件名、所有环境字符串和程序的命令也可以包含类似的Python字符串表达式,以便向每个进程传递略有不同的参数。
6.1 [program:x]
段的值
command
启动此程序时将运行的命令。该命令可以是绝对的(例如
/path/to/programname
),也可以是相对的(例如programname
)。如果是相对的,则会在supervisord的环境$PATH
中搜索可执行文件。程序可以接受参数,例如/path/to/program foo bar
。命令行可以使用双引号将包含空格的参数分组传递给程序,例如/path/to/program/name -p "foo bar"
。注意,command
的值可能包括Python字符串表达式,例如/path/to/programname——port=80%(process_num)02d
可能在运行时扩展为/path/to/programname——port=8000
。字符串表达式是根据字典计算的,字典中包含键group_name
、host_node_name
、program_name
、process_num
、numprocs
、here
(是supervisord配置文件的目录)和所有supervisord环境变量(前缀为ENV_
)。受控制的程序本身不应该是守护进程,因为监督者假定它负责守护它的子进程(参见子进程的非守护进程)。注意:
如果命令看起来像一个配置文件注释,它将被截断,例如
command=bash -c 'foo;Bar '
将被截断为command=bash -c 'foo
。引用不能阻止这种行为,因为配置文件读取器不像shell那样解析命令。默认值: No default.
必选字段: Yes.
引自: 3.0
更改: 4.2.0. 增加对
numprocs
扩展的支持.
process_name
一个Python字符串表达式,用于组成此进程的主管进程名称。你通常不需要担心设置这个除非你改变
numprocs
。字符串表达式是根据字典计算的,其中包括group_name
、host_node_name
、process_num
、program_name
和here
(supervisord配置文件的目录)。默认值:
%(program_name)s
必选字段: No.
引自: 3.0
numprocs
Supervisor将启动numprocs命名的任意数量的程序实例。注意,如果numprocs > 1,
process_name
表达式必须包含%(process_num)s
(或任何其他包含process_num
的有效Python字符串表达式)。默认值: 1
必选字段: No.
引自: 3.0
numprocs_start
一个整数偏移量,用于计算
numprocs
开始的数字。默认值: 0
必选字段: No.
引自: 3.0
priority
程序在启动和关闭顺序中的相对优先级。较低的优先级表示程序首先启动,最后在启动时关闭,以及在不同的客户端中使用聚合命令时(例如" start all " / " stop all ")。更高的优先级表示最后启动、先关闭的程序。
默认值: 999
必选字段: No.
引自: 3.0
autostart
如果为true,该程序将在启动supervisord时自动启动。
默认值: true
必选字段: No.
引自: 3.0
startsecs
启动后程序需要保持运行的总秒数,以确保启动成功(将进程从
STARTING
状态移动到RUNNING
状态)。设置为0
表示程序不需要在任何特定的时间内保持运行。注意:
即使进程退出时带有“预期的”退出码(参见
exitcodes
),如果进程退出的速度比startsecs
快,启动仍然会被认为失败。默认值: 1
必选字段: No.
引自: 3.0
startretries
在放弃进程并将进程置于
FATAL
状态之前启动程序时,supervisord
允许的串行失败尝试的次数。注意:
在每次失败的重启之后,进程将处于
BACKOFF
状态,并且每次重试尝试将花费越来越多的时间。关于
FATAL
和BACKOFF
状态的解释,请参见进程状态。默认值: 3
必选字段: No.
引自: 3.0
autorestart
指定如果一个进程在
RUNNING
状态时退出,supervised是否应该自动重新启动它。可能是false
,unexpected
,或true
。如果为false
,则不会自动重新启动该进程。如果unexpected
,进程将在程序退出时重启,退出代码不是与进程配置相关的退出代码(参见exitcodes
)。如果为true
,进程退出时将无条件重新启动,而不考虑其退出代码。注意:
autorestart
控制supervisord是否会在程序成功启动后退出(进程处于RUNNING
状态)时自动重启程序。当进程启动时(进程处于
starting
状态),supervisord有不同的重启机制。进程启动期间的重试由startsecs
和startretries
控制。默认值: unexpected
必选字段: No.
引自: 3.0
exitcodes
autorestart
使用的此程序的“预期”退出码列表。如果autorestart
参数设置为unexpected
(意外),并且进程以任何其他方式退出,而不是由于supervisor停止请求,那么如果进程退出时带有不在此列表中定义的退出码,supervised将重启进程。默认值: 0
必选字段: No.
引自: 3.0
注意:
在4.0之前的Supervisor版本中,默认值是
0,2
。在Supervisor 4.0中,默认值被更改为0
。
stopsignal
在请求停止时用来终止程序的信号。可以是TERM、HUP、INT、QUIT、KILL、USR1或USR2中的任何一个。
默认值: TERM
必选字段: No.
引自: 3.0
stopwaitsecs
在程序发送停止信号后,等待操作系统返回SIGCHLD给supervisord的秒数。如果在supervisord接收到SIGCHLD之前经过了这个秒数,supervisord将尝试使用最终的SIGKILL来终止它。
默认值: 10
必选字段: No.
引自: 3.0
stopasgroup
如果为true,则该标志导致supervisor向整个进程组发送停止信号,并暗示
killasgroup
为true。这对于程序很有用,比如调试模式下的弗拉斯克,这些程序不会将停止信号传播给它们的子程序,使它们成为孤立的。默认值: false
必选字段: No.
引自: 3.0b1
killasgroup
如果为true,当向程序发送SIGKILL来终止时,它会将SIGKILL发送给它的整个进程组,同时照顾它的子进程,这对使用
multiprocessing
的Python程序很有用。默认值: false
必选字段: No.
引自: 3.0a11
user
指示supervisord使用这个UNIX用户帐户作为运行程序的帐户。只有当supervisord以root用户运行时,用户才能切换。如果supervisord不能切换到指定的用户,程序将不会启动。
注意:
仅使用
setuid
更改用户。这不会启动登录shell,也不会改变USER
或HOME
等环境变量。有关详细信息,请参见子流程环境。默认值: Do not switch users
必选字段: No.
引自: 3.0
redirect_stderr
如果为true,则将进程的stderr输出发送回其stdout文件描述符上的supervisord(在UNIX shell术语中,这相当于执行
/the/program 2>&1
)。注意:
不要在
[eventlistener:x]
部分中设置redirect_stderr=true
。事件监听器使用stdout
和stdin
与supervisord
通信。如果stderr
被重定向,stderr
的输出将干扰eventlistener协议。默认值: false
必选字段: No.
引自: 3.0, replaces 2.0’s
log_stdout
andlog_stderr
stdout_logfile
将进程stdout输出放在此文件中(如果redirect_stderr为true,也将stderr输出放在此文件中)。如果
stdout_logfile
未设置或设置为AUTO
, supervisor将自动选择文件位置。如果设置为NONE
, supervise将不创建日志文件。AUTO
日志文件及其备份将被删除时,supervisord重启。stdout_logfile
值可以包含Python字符串表达式,该表达式将对包含键group_name
、host_node_name
、process_num
、program_name
和here
(supervisord配置文件的目录)的字典进行计算。注意:
当启用循环覆盖(
stdout_logfile_maxbytes
)时,两个进程不可能共享一个日志文件(stdout_logfile
)。这将导致文件被损坏。注意:
如果
stdout_logfile
被设置为不可查找的特殊文件/dev/stdout
,则必须通过设置stdout_logfile_maxbytes = 0
来禁用日志循环覆盖。默认值:
AUTO
必选字段: No.
引自: 3.0, replaces 2.0’s
logfile
stdout_logfile_maxbytes
stdout_logfile
在被旋转之前可能消耗的最大字节数(后缀乘数如“KB”、“MB”和“GB”可以在值中使用)。将此值设置为0表示无限制的日志大小。默认值: 50MB
必选字段: No.
引自: 3.0, replaces 2.0’s
logfile_maxbytes
stdout_logfile_backups
由进程stdout日志文件旋转产生的保留的
stdout_logfile
备份的数量。如果设置为0,则不保留任何备份。默认值: 10
必选字段: No.
引自: 3.0, replaces 2.0’s
logfile_backups
stdout_capture_maxbytes
当进程处于“stdout捕获模式”(参见捕获模式)时,捕获FIFO所写入的最大字节数。应该是一个整数(后缀乘数如“KB”,“MB”和“GB”可以在值中使用)。如果该值为0,进程捕获模式将关闭。
默认值: 0
必选字段: No.
引自: 3.0
stdout_events_enabled
如果为true,当进程写入其stdout文件描述符时将触发
PROCESS_LOG_STDOUT
事件。只有在接收数据时文件描述符未处于捕获模式时才会触发事件(请参阅捕获模式)。默认值: 0
必选字段: No.
引自: 3.0a7
stdout_syslog
如果为true, stdout将连同进程名一起定向到syslog。
默认值: False
必选字段: No.
引自: 4.0.0
stderr_logfile
除非
redirect_stderr
为true,否则将进程stderr输出放在此文件中。接受与stdout_logfile
相同的值类型,可能包含相同的Python字符串表达式。注意:
当启用旋转(
stderr_logfile_maxbytes
)时,两个进程不可能共享一个日志文件(stderr_logfile
)。这将导致文件被损坏。注意:
如果
stderr_logfile
被设置为不可查找的特殊文件/dev/stderr
,则必须通过设置stderr_logfile_maxbytes = 0
来禁用日志旋转。默认值:
AUTO
必选字段: No.
引自: 3.0
stderr_logfile_maxbytes
stderr_logfile
旋转日志文件前的最大字节数。接受与stdout_logfile_maxbytes
相同的值类型。默认值: 50MB
必选字段: No.
引自: 3.0
stderr_logfile_backups
由进程stderr日志文件旋转产生的要保留的备份数量。如果设置为0,则不保留任何备份。
默认值: 10
必选字段: No.
引自: 3.0
stderr_capture_maxbytes
当进程处于“stderr捕获模式”时,捕获FIFO所写入的最大字节数(参见捕获模式)。应该是一个整数(后缀乘数如“KB”,“MB”和“GB”可以在值中使用)。如果该值为0,进程捕获模式将关闭。
默认值: 0
必选字段: No.
引自: 3.0
stderr_events_enabled
如果为true,当进程写入其stderr文件描述符时将触发
PROCESS_LOG_STDERR
事件。只有在接收数据时文件描述符未处于捕获模式时才会触发事件(请参阅捕获模式)。默认值: false
必选字段: No.
引自: 3.0a7
stderr_syslog
如果为true, stderr将连同进程名一起被定向到syslog。
默认值: False
必选字段: No.
引自: 4.0.0
environment
KEY ="val",KEY2="val2"
形式的键/值对列表,将被放置在子进程环境中。环境字符串可能包含Python字符串表达式,这些表达式将根据包含group_name
、host_node_name
、process_num
、program_name
和here
(supervisord配置文件的目录)的字典进行计算。包含非字母数字字符的值应该用引号括起来(例如,KEY ="val:123",KEY2="val,456"
)。否则,引用值是可选的,但推荐使用。请注意,子进程将继承用于启动supervisord的shell的环境变量,这里覆盖的变量除外。参阅子流程的环境。默认值: No extra environment
必选字段: No.
引自: 3.0
directory
一个文件路径,表示一个目录,在执行子目录之前,supervisord应该暂时对其进行chdir处理。
默认值: No chdir (inherit supervisor’s)
必选字段: No.
引自: 3.0
umask
一个表示进程掩码的八进制数字(如002、022)。
默认值: No special umask (inherit supervisor’s)
必选字段: No.
引自: 3.0
serverurl
在环境中传递给子进程的URL为
SUPERVISOR_SERVER_URL
(参见supervisor.childutils
),以允许子进程方便地与内部HTTP服务器通信。如果提供,它应该具有与同名的[supervisorctl]
节选项相同的语法和结构。如果设置为AUTO,或者不设置,supervisor将自动构造一个服务器URL,优先选择监听UNIX域套接字的服务器,而不是监听internet套接字的服务器。默认值: AUTO
必选字段: No.
引自: 3.0
6.2 [program:x]
段示例
[program:cat]
command=/bin/cat
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=unexpected
startsecs=10
startretries=3
exitcodes=0
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
7. [include]
段设置
supervisord.conf
文件可能包含一个名为[include]
的节。如果配置文件包含一个[include]
节,它必须包含一个名为" files "的单密钥。此键中的值指定配置中包含的其他配置文件。
注意:
[inclue]
段只由supervisord
处理。它会被supervisorctl
忽略。
7.1 [include]
段的值
files
用空格分隔的文件globs序列。每个文件glob可以是绝对的,也可以是相对的。如果文件glob是相对的,则它被认为是相对于包含它的配置文件的位置。glob是一个文件模式,它根据Unix shell使用的规则匹配指定的模式。没有进行波浪号展开,但是
*
、?
和用[]
表示的字符范围将被正确匹配。字符串表达式是根据包含host_node_name
和here
(supervisord配置文件的目录)的字典计算的。不支持包含文件的递归包含。默认值: No default (required)
必选字段: Yes.
引自: 3.0
更改: 3.3.0. Added support for the
host_node_name
expansion.
7.2 [include]
段的示例
[include]
files = /an/absolute/filename.conf /an/absolute/*.conf foo.conf config??.conf
8. [group:x]
段设置
将“同构”过程组(又名“程序”)分组成一个“异构”过程组通常是有用的,这样它们就可以从Supervisor的各种控制器接口中作为一个单元进行控制。
要将程序放在一个组中,以便您可以将它们视为一个单元,请在配置文件中定义一个[group:x]
节。组标题值是一个复合值。它是单词“group”,后面直接跟着一个冒号,然后是组名。[group:foo]
的头值描述了一个名为“foo”的组。该名称用于控制由于此配置而创建的进程的客户端应用程序中。创建没有名称的组节是错误的。名称不能包含冒号或括号字符。
对于[group:x]
,在配置文件的其他地方必须有一个或多个[program:x]
节,并且组必须在program
值中通过名称引用它们。
如果“同构”的过程组(由程序段表示)通过[group:x]
段的程序行被放到一个“异构”组中,program
段所暗示的同构组在运行时在supervisor中将不存在。相反,属于每个同构组的所有流程都将被放入异构组中。例如,给定以下组配置:
[group:foo]
programs=bar,baz
priority=999
根据上述情况,在supervisord启动时,bar
和baz
同构组将不存在,原本在它们下面的进程现在将被移到foo
组中。
8.1 [group:x]
段的值
programs
以逗号分隔的程序名列表。列出的程序成为该小组的成员。
默认值: No default (required)
必选字段: Yes.
引自: 3.0
priority
优先级号,类似于分配给组的
[program:x]
优先级值。默认值: 999
必选字段: No.
引自: 3.0
8.2 [group:x]
段的示例
[group:foo]
programs=bar,baz
priority=999
9. [fcgi-program:x]
Section Settings
Supervisor可以管理FastCGI进程组,所有进程都监听同一套接字。到目前为止,FastCGI的部署灵活性是有限的。为了获得完整的进程管理,你可以在Apache下使用mod_fastcgi,但是你会被Apache低效的并发模型(每个连接一个进程或线程)所困扰。除了需要更多的CPU和内存资源外,每个连接模型的进程/线程可能会很快被较慢的资源饱和,从而阻止其他资源得到服务。为了利用新的事件驱动的web服务器,如lighttpd或nginx,它们不包含内置的进程管理器,你必须使用像cgi-fcgi或spawn-fcgi这样的脚本。它们可以与进程管理器(如supervisor或daemontools)一起使用,但需要每个FastCGI子进程绑定到自己的套接字。这样做的缺点是:不必要的复杂的web服务器配置、不优雅的重启和降低的容错性。由于需要配置的套接字较少,如果FastCGI进程组可以共享套接字,web服务器的配置就会小得多。共享套接字允许正常重启,因为在任何子进程被重启时,套接字仍然被父进程绑定。最后,共享套接字具有更高的容错性,因为如果给定的进程失败,其他进程可以继续为入站连接提供服务。
与集成的FastCGI生成支持,Supervisor给你最好的两个领域。你可以通过FastCGI进程组共享套接字来实现功能齐全的进程管理,而无需绑定到特定的web服务器。这是一个清晰的关注点分离,允许web服务器和进程管理器各自做他们最擅长的事情。
注意:
socket管理器最初是为了支持FastCGI进程而开发的,但它并不局限于FastCGI。其他协议也可以使用,无需特殊配置。任何可以从文件描述符访问打开的套接字的程序(例如Python中的socket.fromfd)都可以使用套接字管理器。在fork组中的第一个子对象之前,Supervisor将自动创建socket、bind和listen。套接字将被传递给文件描述符0
(0)上的每一个子对象。当组中的最后一个子节点退出时,Supervisor将关闭套接字。
注意:
在Supervisor 3.4.0之前,FastCGI程序([fcgi-program:x]
)无法在groups ([group:x]
)中被引用。
fcgi-program节也适用[program:x]
节可用的所有选项。
9.1 [fcgi-program:x]
段的值
[fcgi-program:x]
sections有一些[program:x]
sections没有的键。
socket
这个程序的FastCGI套接字,可以是TCP或UNIX域套接字。对于TCP套接字,使用以下格式:
TCP://localhost:9002
。对于UNIX域套接字,使用UNIX:///absolute/path/to/file.sock
。字符串表达式根据包含键“program_name”和“here”(supervisord配置文件的目录)的字典计算。默认值: No default.
必选字段: Yes.
引自: 3.0
socket_backlog
设置套接字listen(2)backlog。
默认值: socket.SOMAXCONN
必选字段: No.
引自: 3.4.0
socket_owner
对于UNIX域套接字,该参数可用于指定FastCGI套接字的用户和组。可能是一个UNIX用户名(例如chrism),或者用冒号分隔的UNIX用户名和组(例如chrism:wheel)。
默认值: Uses the user and group set for the fcgi-program
必选字段: No.
引自: 3.0
socket_mode
对于UNIX域套接字,该参数可用于指定权限模式。
默认值: 0700
必选字段: No.
引自: 3.0
请参阅[program:x]节设置其他允许的键,修改以上约束和附加项。
9.2 [fcgi-program:x]
段示例
[fcgi-program:fcgiprogramname]
command=/usr/bin/example.fcgi
socket=unix:///var/run/supervisor/%(program_name)s.sock
socket_owner=chrism
socket_mode=0700
process_name=%(program_name)s_%(process_num)02d
numprocs=5
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
exitcodes=0
stopsignal=QUIT
stopasgroup=false
killasgroup=false
stopwaitsecs=10
user=chrism
redirect_stderr=true
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_events_enabled=false
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_events_enabled=false
environment=A="1",B="2"
serverurl=AUTO
10. [eventlistener:x]
段设置
Supervisor允许在配置文件中定义专门的同构流程组(“事件侦听器池”)。这些池包含用于接收和响应来自主管事件系统的事件通知的流程。有关事件如何工作以及如何实现可声明为事件监听器的程序的解释,请参见事件。
注意,除了stdout_capture_maxbytes
之外,eventlistener节尊重[program:x]
节可用的所有选项。事件监听器不能在stdout
上发出进程通信事件,但可以在stderr
上发出(请参阅捕获模式)。
10.1 [eventlistener:x]
段的值
[eventlistener:x]
节有一些[program:x]
节没有的键。
buffer_size
事件侦听器池的事件队列缓冲区大小。当侦听器池的事件缓冲区溢出时(当事件侦听器池无法跟上发送给它的所有事件时也会发生这种情况),缓冲区中最老的事件将被丢弃。
events
以逗号分隔的事件类型名称列表,此侦听器对接收通知“感兴趣”(有关有效事件类型名称的列表,请参见事件类型)。
result_handler
一个解析为Python可调用对象的pkg_resources(http://peak.telecommunity.com/DevCenter/PkgResources)入口点字符串。默认值是
supervisor.dispatchers:default_handler
。指定一个替代结果处理程序是一件非常不常见的事情,因此,如何创建一个没有文档记录。
请参阅[program:x]节设置(http://supervisord.org/configuration.html#programx-section)其他允许的键,修改以上约束和附加项。
10.2 [eventlistener:x]
段示例
[eventlistener:theeventlistenername]
command=/bin/eventlistener
process_name=%(program_name)s_%(process_num)02d
numprocs=5
events=PROCESS_STATE
buffer_size=10
directory=/tmp
umask=022
priority=-1
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
exitcodes=0
stopsignal=QUIT
stopwaitsecs=10
stopasgroup=false
killasgroup=false
user=chrism
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_events_enabled=false
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_events_enabled=false
environment=A="1",B="2"
serverurl=AUTO
11. [rpcinterface:x]
段设置
在配置文件中添加rpcinterface:x
设置只对那些希望使用其他自定义行为扩展supervisor的人有用。
在样例配置文件中,有一个名为[rpcinterface:supervisor]
的节。默认情况下,它看起来如下所示。
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
section [rpcinterface:supervisor]
必须保持在配置中,以便supervisor的标准设置能够正常工作。如果你不想让supervisor做任何它还没有开箱即用的事情,这就是你需要知道的关于这类section的所有内容。
但是,如果你希望添加rpc接口名称空间来定制supervisor,你可以添加额外的[rpcinterface:foo]
节,其中“foo”代表接口的名称空间(来自web根),以及supervisor命名的值。supervisor.rpcinterface_factory
是一个工厂可调用对象,它应该有一个函数签名,该签名接受一个位置参数supervisord
和执行配置所需的所有关键字参数。在[rpcinterface:x]
节中定义的任何额外的键/值对都将作为关键字参数传递给工厂。
下面是一个工厂函数的例子,创建于Python包my.package
的__init__.py
文件中。
from my.package.rpcinterface import AnotherRPCInterface
def make_another_rpcinterface(supervisord, **config):
retries = int(config.get('retries', 0))
another_rpc_interface = AnotherRPCInterface(supervisord, retries)
return another_rpc_interface
以及配置文件中用来配置它的部分。
[rpcinterface:another]
supervisor.rpcinterface_factory = my.package:make_another_rpcinterface
retries = 1
11.1 [rpcinterface:x]
段的值
supervisor.rpcinterface_factory
pkg_resources
“入口点”以点分隔名称指向RPC接口的工厂函数。默认值: N/A
必选字段: No.
引自: 3.0
11.2 [rpcinterface:x]
段示例
[rpcinterface:another]
supervisor.rpcinterface_factory = my.package:make_another_rpcinterface
retries = 1