运行Supervisor¶
本节在解释如何运行 supervisord 和 supervisorctl 命令时参考 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 过程启动时将运行 cat
的 program
部分如下所示。
[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活动日志的备份副本数。每个日志文件的大小为 | |
-e LEVEL, --loglevel=LEVEL | |
Supervisor应写入活动日志的日志记录级别。有效的水平是 | |
-j FILE, --pidfile=FILE | |
超级用户应将其pid文件写入的文件名。 | |
-i STRING, --identifier=STRING | |
各种客户端UI为此管理员实例公开的任意字符串标识符。 | |
-q PATH, --childlogdir=PATH | |
目录的路径(它必须已经存在),其中supervisor将写入其 | |
-k, --nocleanup | |
防止 supervisord 在启动时执行清除(删除旧的 | |
-a NUM, --minfds=NUM | |
在成功启动Supervisord进程之前必须可用的文件描述符的最小数目。 | |
-t, --strip_ansi | |
从所有子日志进程剥离ANSI转义序列。 | |
-v, --version | 将supervisord版本号输出到stdout并退出。 |
--profile_options=LIST | |
用于分析的逗号分隔的选项列表。使 supervisord 在分析器下运行,并根据选项输出结果,这是以逗号分隔的以下列表: | |
--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)