Skip to main content

配置文件

Supervisor配置文件通常命名为 supervisord.conf。它被 supervisordsupervisorctl 使用。如果任一应用程序在没有 -c 选项(用于明确告知应用程序配置文件名的选项)的情况下启动,则应用程序将按照指定的顺序在以下位置中查找名为 supervisord.conf 的文件。它将使用它找到的第一个文件。

  1. $CWD/supervisord.conf

  2. $CWD/etc/supervisord.conf

  3. /etc/supervisord.conf

  4. /etc/supervisor/supervisord.conf (自Supervisor 3.3.0之后)

  5. ../etc/supervisord.conf (相对于可执行文件)

  6. ../supervisord.conf (相对于可执行文件)

注解

为Debian和Ubuntu打包的许多版本的Supervisor包括一个将 /etc/supervisor/supervisord.conf 添加到搜索路径的补丁。第一个包含Supervisor的PyPI包是Supervisor 3.3.0。

文件格式

supervisord.conf 是一个Windows-INI风格(Python ConfigParser)文件。它具有部分(每个由 [header] 表示)和部分中的键/值对。这些部分及其允许值如下所述。

环境变量

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 表达式。在以前的版本中,一些选项支持它们,但大多数不支持。请参阅下面每个选项的文档。

[unix_http_server] 节设置

supervisord.conf 文件包含一个名为 [unix_http_server] 的节,应该插入在UNIX域套接字上侦听的HTTP服务器的配置参数。如果配置文件没有 [unix_http_server] 部分,则不会启动UNIX域套接字HTTP服务器。允许的配置值如下。

[unix_http_server] 节值

file

Supervisor将监听HTTP/XML-RPC请求的UNIX域套接字(例如 /tmp/supervisord.sock)的路径。 supervisorctl 使用XML-RPC通过此端口与 supervisord 通信。此选项可以包括值 %(here)s,该值将扩展到找到 supervisord 配置文件的目录。

Default:无。

Required:不。

Introduced:3.0

chmod

在启动时将UNIX域套接字的UNIX权限模式位更改为此值。

Default0700

Required:不。

Introduced:3.0

chown

将套接字文件的用户和组更改为此值。可以是UNIX用户名(例如 chrism)或用冒号(例如 chrism:wheel)分隔的UNIX用户名和组。

Default:使用启动supervisord的用户的用户名和组。

Required:不。

Introduced:3.0

username

对此HTTP服务器进行身份验证所需的用户名。

Default:无需用户名。

Required:不。

Introduced:3.0

password

对此HTTP服务器进行身份验证所需的密码。这可以是明文密码,或者可以指定为SHA-1散列,前缀为字符串 {SHA}。例如,{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d 是SHA存储的密码“thepassword”的版本。

请注意,散列密码必须为十六进制格式。

Default:无需密码。

Required:不。

Introduced:3.0

[unix_http_server] 部分示例

[unix_http_server]
file = /tmp/supervisor.sock
chmod = 0777
chown= nobody:nogroup
username = user
password = 123

[inet_http_server] 节设置

supervisord.conf 文件包含一个名为 [inet_http_server] 的段,在该段下,应插入在TCP(Internet)套接字上侦听的HTTP服务器的配置参数。如果配置文件没有 [inet_http_server] 部分,则不会启动inet HTTP服务器。允许的配置值如下。

[inet_http_server] 节值

port

TCP主机:监控器将监听HTTP/XML-RPC请求的端口值或(例如,127.0.0.1:9001)。 supervisorctl 将使用XML-RPC通过此端口与 supervisord 通信。要监听机器中的所有接口,请使用 :9001*:9001

Default:无默认值。

Required:是的。

Introduced:3.0

username

对此HTTP服务器进行身份验证所需的用户名。

Default:无需用户名。

Required:不。

Introduced:3.0

password

对此HTTP服务器进行身份验证所需的密码。这可以是明文密码,或者可以指定为SHA-1散列,前缀为字符串 {SHA}。例如,{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d 是SHA存储的密码“thepassword”的版本。

请注意,散列密码必须为十六进制格式。

Default:无需密码。

Required:不。

Introduced:3.0

[inet_http_server] 部分示例

[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123

[supervisord] 节设置

supervisord.conf 文件包含一个名为 [supervisord] 的段,其中应插入与 supervisord 进程相关的全局设置。这些如下。

[supervisord] 节值

logfile

超级过程的活动日志的路径。此选项可以包括值 %(here)s,该值将扩展到找到超级用户配置文件的目录。

Default$CWD/supervisord.log

Required:不。

Introduced:3.0

logfile_maxbytes

活动日志文件旋转之前可能消耗的最大字节数(可以在值中使用类似“KB”,“MB”和“GB”的后缀乘法器)。将此值设置为0表示无限日志大小。

Default:50MB

Required:不。

Introduced:3.0

logfile_backups

由活动日志文件轮换导致的备份数。如果设置为0,将不保留备份。

Default:10

Required:不。

Introduced:3.0

loglevel

日志记录级别,指示写入supervisord活动日志的内容。 criticalerrorwarninfodebugtraceblather 中的一种。注意,在日志级别 debug,超级访问日志文件将记录其子进程的stderr/stdout输出和关于进程状态更改的扩展信息信息,这对于调试未正确启动的进程很有用。参见:活动日志级别

Default:info

Required:不。

Introduced:3.0

pidfile

超级用户保留其pid文件的位置。此选项可以包括值 %(here)s,该值将扩展到找到超级用户配置文件的目录。

Default$CWD/supervisord.pid

Required:不。

Introduced:3.0

umask

超级过程的 umask

Default022

Required:不。

Introduced:3.0

nodaemon

如果为true,supervisord将在前台而不是守护进程启动。

Default:false

Required:不。

Introduced:3.0

minfds

在supervisord将成功启动之前必须可用的文件描述符的最小数量。将调用setrlimit以尝试提高超级过程的软和硬限制以满足 minfds。只有在以root身份运行supervisord时,才能提出硬限制。 supervisord自由使用文件描述符,并且当无法从操作系统获取时将进入故障模式,因此能够指定最小值以确保在执行期间不会耗尽它们是有用的。此选项在Solaris上特别有用,Solaris在默认情况下具有较低的每进程fd限制。

Default:1024

Required:不。

Introduced:3.0

minprocs

在supervisord将成功启动之前必须可用的进程描述符的最小数量。将调用setrlimit以尝试提高超级过程的软和硬限制以满足 minprocs。只有在以root身份运行supervisord时,才能提出硬限制。当OS运行完过程描述符时,supervisord将进入故障模式,因此确保在 supervisord 启动时有足够的进程描述符可用。

Default:200

Required:不。

Introduced:3.0

nocleanup

防止supervisord在启动时清除任何现有的 AUTO 子日志文件。用于调试。

Default:false

Required:不。

Introduced:3.0

childlogdir

用于 AUTO 子日志文件的目录。此选项可以包括值 %(here)s,该值将扩展到找到 supervisord 配置文件的目录。

Default:Python的 tempfile.get_tempdir() 的值

Required:不。

Introduced:3.0

user

指示 supervisord 在进行任何有意义的处理之前将用户切换到此UNIX用户帐户。只有在以root用户身份启动 supervisord 时,才能切换用户。如果 supervisord 无法切换用户,它仍然会继续,但会在 critical 级别写入一条日志消息,说它不能删除权限。

Default:不切换用户

Required:不。

Introduced:3.0

directory

supervisord 守护进程时,切换到此目录。此选项可以包括值 %(here)s,该值将扩展到找到 supervisord 配置文件的目录。

Default:不要cd

Required:不。

Introduced:3.0

strip_ansi

从子日志文件中剥离所有ANSI转义序列。

Default:false

Required:不。

Introduced:3.0

environment

将被放置在 supervisord 进程环境中(以及作为其所有子进程的环境的结果)的 KEY="val",KEY2="val2" 形式的键/值对的列表。此选项可以包括值 %(here)s,该值将扩展到找到超级用户配置文件的目录。包含非字母数字字符的值应引用(例如 KEY="val:123",KEY2="val,456")。否则,引用值是可选的,但建议。要转义百分比字符,只需使用两个。 (例如 URI="/first%%20name")子进程的 注意 将继承用于启动 supervisord 的shell的环境变量,除了在这里和程序的 environment 选项中被覆盖的那些。见 子过程环境

Default:无值

Required:不。

Introduced:3.0

identifier

RPC接口使用的此supervisor进程的标识符字符串。

Default:supervisor

Required:不。

Introduced:3.0

[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"

[supervisorctl] 节设置

配置文件可能包含 supervisorctl 交互式shell程序的设置。这些选项如下所示。

[supervisorctl] 节值

serverurl

应用于访问超级服务器的URL,例如 http://localhost:9001。对于UNIX域套接字,请使用 unix:///absolute/path/to/file.sock

Defaulthttp://localhost:9001

Required:不。

Introduced:3.0

username

传递到supervisord服务器以用于身份验证的用户名。这应该与您尝试访问的端口或UNIX域套接字的超级服务器配置中的 username 相同。

Default:无用户名

Required:不。

Introduced:3.0

password

要传递到Supervisord服务器以用于身份验证的密码。这应该是来自您尝试访问的端口或UNIX域套接字的supervisord服务器配置的 password 的明文版本。此值不能作为SHA哈希传递。与此文件中指定的其他密码不同,它必须以明文形式提供。

Default:无密码

Required:不。

Introduced:3.0

prompt

用作supervisorctl提示符的字符串。

Defaultsupervisor

Required:不。

Introduced:3.0

history_file

用作 readline 持久性历史记录文件的路径。如果通过选择路径启用此功能,您的supervisorctl命令将保存在文件中,您可以使用readline(例如,arrow-up)来调用您在上次supervisorctl会话中执行的命令。

Default:无文件

Required:不。

Introduced:3.0a5

[supervisorctl] 部分示例

[supervisorctl]
serverurl = unix:///tmp/supervisor.sock
username = chris
password = 123
prompt = mysupervisor

[program:x] 节设置

配置文件必须包含一个或多个 program 段,以便supervisord知道应该启动和控制哪些程序。标题值是复合值。它是单词“程序”,后面紧跟一个冒号,然后是程序名。 [program:foo] 的标头值描述具有名称“foo”的程序。该名称用于控制由于此配置而创建的进程的客户端应用程序中。创建没有名称的 program 节是一个错误。名称不能包含冒号字符或括号字符。名称的值用作在指定的其他值内的 %(program_name)s 字符串表达式扩展的值。

注解

[program:x] 部分实际上是一个“均匀的过程组”到supervisor(从3.0开始)。组的成员由配置中的 numprocsprocess_name 参数的组合来定义。默认情况下,如果numprocs和process_name保持不变,它们的缺省值,[program:x] 表示的组将被命名为 x,并将有一个名为 x 的单个进程。这提供了与旧的管理程序版本的向后兼容性,其不将程序段视为同构的进程组定义。

但是,例如,如果您有一个 numprocs 为3的 [program:foo] 部分和 %(program_name)s_%(process_num)02dprocess_name 表达式,则“foo”组将包含三个进程,分别名为 foo_00foo_01foo_02。这使得可以使用单个 [program:x] 部分开始多个非常类似的过程。所有日志文件名称,所有环境字符串和程序的命令也可以包含类似的Python字符串表达式,以将稍微不同的参数传递给每个进程。

[program:x] 节值

command

此程序启动时将运行的命令。该命令可以是绝对的(例如 /path/to/programname)或相对的(例如 programname)。如果是相对的,将在超级用户的环境 $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_namehost_node_nameprocess_numprogram_namehere (超级用户配置文件的目录)的字典以及所有以 ENV_ 为前缀的环境变量进行求值。受控程序本身不应该是守护进程,因为supervisord假定它负责对其子进程进行守护进程(参见 子进程的本地化)。

Default:无默认值。

Required:是的。

Introduced:3.0

process_name

用于组成此过程的supervisor进程名称的Python字符串表达式。你通常不需要担心设置这个,除非你改变 numprocs。字符串表达式根据包括 group_namehost_node_nameprocess_numprogram_namehere (超级用户配置文件的目录)的字典进行评估。

Default%(program_name)s

Required:不。

Introduced:3.0

numprocs

Supervisor将启动由numprocs命名的此程序的许多实例。请注意,如果numprocs> 1,则 process_name 表达式必须包含 %(process_num)s (或任何其他包含 process_num 的有效Python字符串表达式)。

Default:1

Required:不。

Introduced:3.0

numprocs_start

用于计算 numprocs 开始的数字的整数偏移量。

Default:0

Required:不。

Introduced:3.0

priority

程序在启动和关闭顺序中的相对优先级。较低的优先级指示在启动时最先启动和关闭的程序,以及当在各种客户端中使用聚集命令(例如,“全部启动”/“全部停止”)时。较高的优先级表示最后启动并首先关闭的程序。

Default:999

Required:不。

Introduced:3.0

autostart

如果为true,则在启动supervisord时,此程序将自动启动。

Default:true

Required:不。

Introduced:3.0

startsecs

启动后,程序需要保持运行以考虑启动成功(将进程从 STARTING 状态移动到 RUNNING 状态)的总秒数。设置为 0 以指示程序不需要保持运行任何特定的时间量。

注解

即使进程退出时带有“预期”退出代码(见 exitcodes),如果进程退出比 startsecs 快,则启动仍将被视为失败。

Default:1

Required:不。

Introduced:3.0

startretries

在放弃并将过程置于 FATAL 状态之前,尝试启动程序时,supervisord 将允许的串行故障尝试次数。有关 FATAL 状态的解释,请参阅 过程国

Default:3

Required:不。

Introduced:3.0

autorestart

指定如果 supervisord 处于 RUNNING 状态时,如果它退出,则 supervisord 是否应自动重新启动该进程。可以是 falseunexpectedtrue 之一。如果 false,该进程不会被自动重新启动。如果 unexpected,程序退出时将重新启动该进程,退出代码不是与此进程配置相关联的退出代码之一(请参阅 exitcodes)。如果 true,则进程将在退出时无条件地重新启动,而不考虑其退出代码。

注解

autorestart 控制 supervisord 是否会在程序成功启动后退出时自动重新启动程序(该进程处于 RUNNING 状态)。

supervisord 对进程启动时(进程处于 STARTING 状态)有不同的重新启动机制。过程启动期间的重试由 startsecsstartretries 控制。

Default:意外

Required:不。

Introduced:3.0

exitcodes

autorestart 一起使用的此程序的“预期”退出代码列表。如果 autorestart 参数设置为 unexpected,并且进程以除了超级用户停止请求的结果之外的任何其他方式退出,则如果进程退出并且未在此列表中定义退出代码,则 supervisord 将重新启动该进程。

Default:0,2

Required:不。

Introduced:3.0

stopsignal

请求停止时用于终止程序的信号。这可以是TERM,HUP,INT,QUIT,KILL,USR1或USR2中的任何一个。

Default:TERM

Required:不。

Introduced:3.0

stopwaitsecs

在程序发送一个停止信号后等待操作系统将SIGCHLD返回到 supervisord 的秒数。如果在 supervisord 从进程接收到SIGCHLD之前经过了这个秒数,supervisord 将尝试使用最终的SIGKILL来杀死它。

Default:10

Required:不。

Introduced:3.0

stopasgroup

如果为真,则该标志使管理程序向整个进程组发送停止信号,并暗示 killasgroup 为真。这对于程序(如Flask在调试模式下)非常有用,它不向其子进程传播停止信号,使其成为孤立的。

Default:false

Required:不。

Introduced:3.0b1

killasgroup

如果为true,当使用发送SIGKILL到程序终止它发送它到整个进程组,照顾它的孩子,以及有用的,例如使用 multiprocessing 的Python程序。

Default:false

Required:不。

Introduced:3.0a11

user

指示 supervisord 将此UNIX用户帐户用作运行程序的帐户。只有在以root用户身份运行 supervisord 时,才能切换用户。如果 supervisord 无法切换到指定的用户,程序将不会启动。

注解

用户将仅使用 setuid 更改。这不会启动登录shell,并且不会更改像 USERHOME 的环境变量。详情请参阅 子过程环境

Default:不要切换用户

Required:不。

Introduced:3.0

redirect_stderr

如果为true,则导致进程的stderr输出在其stdout文件描述符上被发送回 supervisord (在UNIX shell中,这相当于执行 /the/program 2>&1)。

注解

不要在 [eventlistener:x] 部分中设置 redirect_stderr=true。事件监听器使用 stdoutstdinsupervisord 通信。如果重定向 stderr,则 stderr 的输出将干扰事件监听器协议。

Default:false

Required:不。

Introduced:3.0,替换2.0的 log_stdoutlog_stderr

stdout_logfile

将进程stdout输出放在此文件中(如果redirect_stderr为true,还将stderr输出放在此文件中)。如果 stdout_logfile 未设置或设置为 AUTO,超级用户将自动选择一个文件位置。如果设置为 NONE,supervisord将不创建日志文件。当 supervisord 重新启动时,AUTO 日志文件及其备份将被删除。 stdout_logfile 值可以包含将针对包含键 group_namehost_node_nameprocess_numprogram_namehere (超级用户配置文件的目录)的字典求值的Python字符串表达式。

注解

当启用旋转(stdout_logfile_maxbytes)时,两个进程不能共享单个日志文件(stdout_logfile)。这将导致文件被损坏。

DefaultAUTO

Required:不。

Introduced:3.0,取代2.0的 logfile

stdout_logfile_maxbytes

stdout_logfile 在旋转之前可能消耗的最大字节数(可以在值中使用类似“KB”,“MB”和“GB”的后缀乘法器)。将此值设置为0表示无限日志大小。

Default:50MB

Required:不。

Introduced:3.0,取代2.0的 logfile_maxbytes

stdout_logfile_backups

由进程标准输出日志文件轮换产生的 stdout_logfile 备份的数量。如果设置为0,将不保留备份。

Default:10

Required:不。

Introduced:3.0,取代2.0的 logfile_backups

stdout_capture_maxbytes

当进程处于“stdout捕获模式”(见 捕获模式)时,写入捕获FIFO的最大字节数。应为整数(可在值中使用“KB”,“MB”和“GB”等后缀乘数)。如果该值为0,则过程捕获模式将关闭。

Default:0

Required:不。

Introduced:3.0,取代2.0的 logfile_backups

stdout_events_enabled

如果为true,则当进程写入其stdout文件描述符时,将发出PROCESS_LOG_STDOUT事件。仅当文件描述符在接收数据时未处于捕获模式时才会发出事件(请参阅 捕获模式)。

Default:0

Required:不。

Introduced:3.0a7

stderr_logfile

将过程stderr输出放在此文件中,除非 redirect_stderr 为true。接受与 stdout_logfile 相同的值类型,并且可以包含相同的Python字符串表达式。

注解

当启用旋转(stderr_logfile_maxbytes)时,两个进程不能共享单个日志文件(stderr_logfile)。这将导致文件被损坏。

DefaultAUTO

Required:不。

Introduced:3.0

stderr_logfile_maxbytes

stderr_logfile 的日志文件轮换前的最大字节数。接受与 stdout_logfile_maxbytes 相同的值类型。

Default:50MB

Required:不。

Introduced:3.0

stderr_logfile_backups

由进程stderr日志文件轮换导致的备份数。如果设置为0,将不保留备份。

Default:10

Required:不。

Introduced:3.0

stderr_capture_maxbytes

当进程处于“stderr捕获模式”(见 捕获模式)时,写入捕获FIFO的最大字节数。应为整数(可在值中使用“KB”,“MB”和“GB”等后缀乘数)。如果该值为0,则过程捕获模式将关闭。

Default:0

Required:不。

Introduced:3.0

stderr_events_enabled

如果为true,则当进程写入其stderr文件描述符时,将发出PROCESS_LOG_STDERR事件。仅当文件描述符在接收数据时未处于捕获模式时才会发出事件(请参阅 捕获模式)。

Default:false

Required:不。

Introduced:3.0a7

environment

将被放置在子进程的环境中的 KEY="val",KEY2="val2" 形式的键/值对的列表。环境字符串可以包含将针对包含 group_namehost_node_nameprocess_numprogram_namehere (超级用户配置文件的目录)的字典求值的Python字符串表达式。包含非字母数字字符的值应引用(例如 KEY="val:123",KEY2="val,456")。否则,引用值是可选的,但建议。 注意,子进程将继承shell的环境变量用于启动“supervisord”,除了在这里覆盖的。见 子过程环境

Default:没有额外的环境

Required:不。

Introduced:3.0

directory

一个文件路径,表示在执行子代之前 supervisord 应暂时chdir的目录。

Default:没有chdir(继承supervisor的)

Required:不。

Introduced:3.0

umask

表示进程的umask的八进制数(例如002,022)。

Default:没有特殊的umask(继承supervisor的)

Required:不。

Introduced:3.0

serverurl

在环境中传递到子进程进程的URL作为 SUPERVISOR_SERVER_URL (参见 supervisor.childutils),以允许子进程轻松地与内部HTTP服务器通信。如果提供,它应该具有与相同名称的 [supervisorctl] 节选项相同的语法和结构。如果将此设置为AUTO或未设置,管理程序将自动构建服务器URL,优先于侦听UNIX域套接字的服务器,而不是侦听互联网套接字的服务器。

Default:自动

Required:不。

Introduced:3.0

[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,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] 节设置

supervisord.conf 文件可能包含一个名为 [include] 的部分。如果配置文件包含 [include] 节,它必须包含一个名为“files”的单个键。此键中的值指定要包含在配置中的其他配置文件。

[include] 节值

files

文件glob的空格分隔序列。每个文件glob可以是绝对的或相对的。如果文件glob是相对的,它被认为是相对于包括它的配置文件的位置。 “glob”是根据Unix shell使用的规则匹配指定模式的文件模式。不进行波纹扩展,但是 *? 和用 [] 表示的字符范围将被正确匹配。字符串表达式将根据包含 host_node_namehere (超级用户配置文件的目录)的字典进行评估。不支持递归包括来自包含的文件。

Default:无默认值(必填)

Required:是的。

Introduced:3.0

Changed:3.3.0。添加了对 host_node_name 扩展的支持。

[include] 部分示例

[include]
files = /an/absolute/filename.conf /an/absolute/*.conf foo.conf config??.conf

[group:x] 节设置

将“同类”过程组(也称为“程序”)组合在一起成为“异构”过程组通常是有用的,因此它们可以作为一个单元从Supervisor的各种控制器接口进行控制。

要将程序放入组中以便将其作为一个单元,请在配置文件中定义 [group:x] 节。组头值是一个复合。它是单词“group”,后面紧跟一个冒号,然后是组名。 [group:foo] 的头值描述具有名称“foo”的组。该名称用于控制由于此配置而创建的进程的客户端应用程序中。创建没有名称的 group 节是一个错误。名称不能包含冒号字符或括号字符。

对于 [group:x],在配置文件的其他位置必须有一个或多个 [program:x] 段,并且该组必须通过 programs 值中的名称引用它们。

如果“同质”过程组(由程序段表示)通过 [group:x] 段的 programs 行放入“异构”组,则程序段隐含的同质组在运行时将不存在于supervisor中。相反,属于每个同构组的所有进程将被放置到异构组中。例如,给定以下组配置:

[group:foo]
programs=bar,baz
priority=999

鉴于上述情况,在超级驾驶启动时,barbaz 同类组将不存在,并且其下的过程现在将移入 foo 组。

[group:x] 节值

programs

以逗号分隔的程序名称列表。列出的程序成为组的成员。

Default:无默认值(必填)

Required:是的。

Introduced:3.0

priority

类似于分配给组的 [program:x] 优先级值的优先级编号。

Default:999

Required:不。

Introduced:3.0

[group:x] 部分示例

[group:foo]
programs=bar,baz
priority=999

[fcgi-program:x] 节设置

Supervisor可以管理所有在同一套接字上侦听的 FastCGI 进程组。到目前为止,FastCGI的部署灵活性有限。为了获得完整的进程管理,你可以在Apache下使用mod_fastcgi,但是你会遇到Apache的每个连接一个进程或线程的低效并发模型。除了需要更多的CPU和内存资源,每个连接模型的进程/线程可能会被缓慢的资源迅速饱和,从而阻止其他资源被提供。为了利用更新的事件驱动的web服务器,如lighttpd或nginx,它们不包括内置的进程管理器,你必须使用像cgi-fcgi或spawn-fcgi这样的脚本。这些可以与流程管理器(如supervisord或daemontools)结合使用,但要求每个FastCGI子进程绑定到其自己的套接字。其缺点是:不必要的复杂的Web服务器配置,不正常的重新启动和降低的容错。使用较少的套接字进行配置,如果FastCGI进程组可以共享套接字,则Web服务器配置要小得多。共享套接字允许正常重新启动,因为当任何子进程正在重新启动时,套接字仍然由父进程绑定。最后,共享套接字更容错,因为如果给定的进程失败,其他进程可以继续提供入站连接。

通过集成的FastCGI产卵支持,Supervisor为您提供两个世界的最好的。您可以使用FastCGI进程共享套接字的组来获得全功能的流程管理,而不必绑定到特定的Web服务器。这是一个干净的分离关注点,允许Web服务器和流程管理器每个都做他们最好的。

注解

Supervisor中的套接字管理器最初是为支持FastCGI进程而开发的,但不限于FastCGI。也可以使用其它协议,而没有特殊配置。任何可以从文件描述符(例如使用Python中的 socket.fromfd)访问打开的套接字的程序都可以使用套接字管理器。 Supervisor将自动创建套接字,绑定和侦听,然后分支组中的第一个孩子。套接字将被传递给每个子文件描述符号 0 (零)。当组中的最后一个孩子退出时,Supervisor将关闭套接字。

[program:x] 部分可用的所有选项也被 fcgi-program 部分遵守。

[fcgi-program:x] 节值

[fcgi-program:x] 段具有 [program:x] 段不具有的单个键。

socket

此程序的FastCGI套接字,即TCP或UNIX域套接字。对于TCP套接字,请使用以下格式:tcp://localhost:9002。对于UNIX域套接字,请使用 unix:///absolute/path/to/file.sock。字符串表达式将根据包含键“program_name”和“here”(超级用户配置文件的目录)的字典求值。

Default:无默认值。

Required:是的。

Introduced:3.0

socket_owner

对于UNIX域套接字,此参数可用于指定FastCGI套接字的用户和组。可以是UNIX用户名(例如chrism)或UNIX用户名和用冒号分隔的组(例如chrism:wheel)。

Default:使用fcgi程序的用户和组集

Required:不。

Introduced:3.0

socket_mode

对于UNIX域套接字,此参数可用于指定权限模式。

Default:0700

Required:不。

Introduced:3.0

请咨询 [program:x] 节设置 了解其他允许的键,增加上述约束和添加。

[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,2
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

[eventlistener:x] 节设置

Supervisor允许在配置文件中定义专用的同构进程组(“事件监听器池”)。这些池包含用于接收和响应来自supervisor的事件系统的事件通知的进程。有关事件如何工作以及如何实现可以声明为事件侦听器的程序的说明,请参阅 事件

注意,对于 stdout_capture_maxbytesstderr_capture_maxbytes (事件监听器不能发出过程通信事件,参见 捕获模式),[program:x] 节的所有可用选项都由事件监听器节 except 遵守。

[eventlistener:x] 节值

[eventlistener:x] 部分有一些 [program:x] 部分没有的键。

buffer_size

事件侦听器池的事件队列缓冲区大小。当监听器池的事件缓冲区溢出时(当事件监听器池无法跟上发送给它的所有事件时,会发生这种情况),则将丢弃缓冲区中最旧的事件。

events

此侦听器在接收通知时感兴趣的事件类型名称的逗号分隔列表(有关有效事件类型名称的列表,请参阅 事件类型)。

result_handler

一个解析为Python可调用的 pkg_resources入口点字符串。默认值为 supervisor.dispatchers:default_handler。指定替代结果处理程序是一个非常少见的事情需要做的,因此,如何创建一个不记录。

请咨询 [program:x] 节设置 了解其他允许的键,增加上述约束和添加。

[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,2
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

[rpcinterface:x] 节设置

在配置文件中添加 rpcinterface:x 设置仅对希望使用其他自定义行为扩展管理程序的人有用。

在示例配置文件中,有一个名为 [rpcinterface:supervisor] 的部分。默认情况下,它如下所示。

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

[rpcinterface:supervisor] 部分 must 保留在配置中,用于标准设置的supervisor正常工作。如果你不想让管理员做任何事情,它还没有开箱即用,这是所有你需要知道的这种类型的部分。

但是,如果您希望添加rpc接口名称空间以自定义管理程序,您可以添加附加的 [rpcinterface:foo] 段,其中“foo”表示接口的命名空间(从Web根目录),并且由 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

[rpcinterface:x] 节值

supervisor.rpcinterface_factory

pkg_resources “入口点”点名称到您的RPC接口的工厂函数。

Default:N/A

Required:不。

Introduced:3.0

[rpcinterface:x] 部分示例

[rpcinterface:another]
supervisor.rpcinterface_factory = my.package:make_another_rpcinterface
retries = 1