Skip to main content

运行Supervisor

本节在解释如何运行 supervisordsupervisorctl 命令时参考 BINDIR。这是你的Python安装配置的“bindir”目录。例如,对于通过 ./configure --prefix=/usr/local/py; make; make install 安装的Python安装,BINDIR 将是 /usr/local/py/bin。不同平台上的Python解释器使用不同的 BINDIR。看看 setup.py install 的输出,如果你不能弄清楚你的位置。

添加程序

supervisord 将为您做任何有用的事情之前,您需要在其配置中至少添加一个 program 部分。 program 部分将定义在调用 supervisord 命令时运行和管理的程序。要添加程序,您需要编辑 supervisord.conf 文件。

运行的最简单的可能程序之一是UNIX cat 程序。当 supervisord 过程启动时将运行 catprogram 部分如下所示。

[program:foo]
command=/bin/cat

此节可以剪切并粘贴到 supervisord.conf 文件中。这是最简单的可能程序配置,因为它只命名命令。程序配置部分具有许多其它配置选项,这里未示出。有关详细信息,请参阅 [program:x] 节设置

运行 supervisord

要启动 supervisord,请运行 $BINDIR/supervisord。生成的进程将守护进程自己并从终端分离。默认情况下,它将操作日志保留在 $CWD/supervisor.log

您可以通过在其命令行上传递 -n 标志在前台启动 supervisord 可执行文件。这对于调试启动问题很有用。

警告

supervisord 启动时,它将在默认位置 包括当前工作目录 搜索其配置文件。如果你有安全意识,你可能需要在 supervisord 命令之后指定一个“-c”参数,指定配置文件的绝对路径,以确保有人不会欺骗你从包含流氓的目录中运行supervisor supervisord.conf 文件。当以root身份启动管理程序时没有此 -c 参数时,将发出警告。

要更改由 supervisord 控制的程序集,请编辑 supervisord.conf 文件和 kill -HUP,否则重新启动 supervisord 进程。此文件有几个示例程序定义。

supervisord 命令接受多个命令行选项。这些命令行选项中的每一个都覆盖配置文件中的任何等效值。

supervisord 命令行选项

-c FILE, --configuration=FILE
 

supervisord 配置文件的路径。

-n, --nodaemon

在前台运行 supervisord

-h, --help

显示 supervisord 命令帮助。

-u USER, --user=USER
 

UNIX用户名或数字用户标识。如果以root用户身份启动 supervisord,则在启动过程中尽快将setuid设置为此用户。

-m OCTAL, --umask=OCTAL
 

表示应在 supervisord 启动后使用的 umask 的八进制数(例如022)。

-d PATH, --directory=PATH
 

当supervisord作为守护程序运行时,在进行daemonizing之前先cd到此目录。

-l FILE, --logfile=FILE
 

用作supervisord活动日志的文件名路径。

-y BYTES, --logfile_maxbytes=BYTES
 

旋转发生之前supervisord活动日志文件的最大大小。该值是后缀乘的,例如“1”是一个字节,“1MB”是1兆字节,“1GB”是1千兆字节。

-y NUM, --logfile_backups=NUM
 

要保留的supervisord活动日志的备份副本数。每个日志文件的大小为 logfile_maxbytes

-e LEVEL, --loglevel=LEVEL
 

Supervisor应写入活动日志的日志记录级别。有效的水平是 tracedebuginfowarnerrorcritical

-j FILE, --pidfile=FILE
 

超级用户应将其pid文件写入的文件名。

-i STRING, --identifier=STRING
 

各种客户端UI为此管理员实例公开的任意字符串标识符。

-q PATH, --childlogdir=PATH
 

目录的路径(它必须已经存在),其中supervisor将写入其 AUTO 模式子进程日志。

-k, --nocleanup
 

防止 supervisord 在启动时执行清除(删除旧的 AUTO 过程日志文件)。

-a NUM, --minfds=NUM
 

在成功启动Supervisord进程之前必须可用的文件描述符的最小数目。

-t, --strip_ansi
 

从所有子日志进程剥离ANSI转义序列。

-v, --version

将supervisord版本号输出到stdout并退出。

--profile_options=LIST
 

用于分析的逗号分隔的选项列表。使 supervisord 在分析器下运行,并根据选项输出结果,这是以逗号分隔的以下列表:cumulativecallscallers。例如。 cumulative,callers

--minprocs=NUM

在成功启动之前,Supervisord进程必须可用的操作系统进程插槽的最小数量。

supervisorctl 命令行选项

-c, --configuration
 

配置文件路径(默认为/etc/supervisord.conf)

-h, --help

打印使用消息并退出

-i, --interactive
 

执行命令后启动交互式shell

-s, --serverurl URL
 

超级服务器正在侦听的URL(默认“ http://localhost:9001 ”)。

-u, --username

用于与服务器进行身份验证的用户名

-p, --password

用于与服务器身份验证的密码

-r, --history-file
 

保持阅读历史(如果阅读行可用)

action [arguments]

操作是类似“尾”或“停止”的命令。如果指定了-i或在命令行上未指定任何操作,则将交互式地解释类型化的“shell”解释。使用操作“帮助”找出可用的操作。

运行 supervisorctl

要启动 supervisorctl,请运行 $BINDIR/supervisorctl。将提供一个shell,允许您控制当前由 supervisord 管理的进程。在提示符处键入“help”以获取有关支持的命令的信息。

当用来自命令行的参数调用时,supervisorctl 可执行文件可以用“一次”命令来调用。例如:supervisorctl stop all。如果参数存在于命令行中,它将阻止交互式shell被调用。相反,命令将被执行,supervisorctl 将退出。

如果以交互模式针对需要身份验证的 supervisord 调用 supervisorctl,将要求您提供身份验证凭据。

信号

supervisord 程序可以被发送信号,该信号使得其在运行时执行某些动作。

您可以将这些信号中的任何一个发送到单个 supervisord 进程标识。此进程标识可以在配置文件的 [supervisord] 部分中的 pidfile 参数所表示的文件中找到(默认为 $CWD/supervisord.pid)。

信号处理器

SIGTERM

supervisord 及其所有子进程将关闭。这可能需要几秒钟。

SIGINT

supervisord 及其所有子进程将关闭。这可能需要几秒钟。

SIGQUIT

supervisord 及其所有子进程将关闭。这可能需要几秒钟。

SIGHUP

supervisord 将停止所有进程,从找到的第一个配置文件重新加载配置,并启动所有进程。

SIGUSR2

supervisord 将关闭并重新打开主活动日志和所有子日志文件。

运行时安全性

开发人员已尽全力确保使用以root身份运行的 supervisord 进程不会导致意外的权限提升。但是 买者自负。Supervisor不像DJ Bernstein的 daemontools 那样偏执,因为 supervisord 允许在其可以写入数据的配置文件中的任意路径规范。允许任意路径选择可以从符号链接攻击创建漏洞。在配置中指定路径时要小心。确保无权限的用户无法读取或写入 supervisord 配置文件,并且管理程序包安装的所有文件都具有“正常”文件权限保护设置。此外,请确保您的 PYTHONPATH 是正常的,并且所有Python标准库文件都有足够的文件权限保护。

启动时自动运行 supervisord

如果您使用分发打包版本的Supervisor,它应该已经集成到您的分发服务管理基础架构中。

有各种操作系统的用户提供的脚本在:https://github.com/Supervisor/initscripts

有一些答案在Serverfault如果你陷入:How to automatically start supervisord on Linux (Ubuntu)