Skip to main content

介绍

概述

Supervisor是一个客户端/服务器系统,允许其用户在类UNIX操作系统上控制多个进程。它的灵感来自以下:

方便

为每个单独的流程实例编写 rc.d 脚本通常是不方便的。 rc.d 脚本是进程初始化/自动启动/管理的一个最低通用分母形式,但是写入和维护会很痛苦。此外,rc.d 脚本不能自动重新启动崩溃的进程,并且许多程序在崩溃时不能正确重新启动。 Supervisord启动进程作为其子进程,并可以配置为在崩溃时自动重新启动它们。它还可以自动配置为在自己的调用上启动进程。

准确性

在UNIX上的进程上获取准确的上/下状态通常很困难。 Pidfiles经常说谎。 Supervisord将进程作为子进程启动,因此它总是知道其子进程的真实上/下状态,并且可以方便地查询此数据。

代表团

需要控制过程状态的用户通常只需要这样做。他们不希望或需要对运行进程的机器进行完全shell访问。在“低”TCP端口上侦听的进程通常需要以root用户身份启动和重新启动(UNIX错误)。通常情况下,允许“正常”人停止或重新启动这样的进程是完全正常的,但是提供shell访问通常是不切实际的,并且为他们提供root访问或sudo访问通常是不可能的。它也(正确)很难向他们解释为什么这个问题存在。如果超级用户作为根启动,可以允许“正常”用户控制这样的过程,而不需要向他们解释问题的复杂性。 Supervisorctl允许非常有限的访问机器的形式,基本上允许用户通过从简单的外壳或web UI发出“停止”,“开始”和“重新启动”命令来查看过程状态并控制超级控制的子进程。

过程组

过程通常需要在组中启动和停止,有时甚至以“优先级顺序”启动和停止。通常很难向人们解释如何做到这一点。管理程序允许您为进程分配优先级,并允许用户通过supervisorctl客户端发出命令,如“start all”和“restart all”,以预先分配的优先级顺序启动它们。另外,可以将进程分组为“进程组”,并且可以停止并开始一组逻辑相关的进程作为一个单元。

特征

简单

Supervisor通过一个简单的INI风格的配置文件配置,很容易学习。它提供了许多每进程选项,使您的生活更轻松,如重新启动失败的进程和自动日志轮换。

集中

Supervisor为您提供一个地方来启动,停止和监视您的进程。过程可以单独或成组控制。您可以配置Supervisor以提供本地或远程命令行和Web界面。

高效

Supervisor通过fork/exec启动其子进程,并且子进程不进行守护进程。操作系统在进程终止时立即向Supervisor发出信号,这与依赖于麻烦的PID文件和定期轮询来重新启动失败进程的解决方案不同。

可扩展

Supervisor有一个简单的事件通知协议,用任何语言编写的程序都可以使用它来监视它,还有一个XML-RPC接口用于控制。它也构建有可以被Python开发人员利用的扩展点。

兼容

Supervisor只适用于除Windows之外的一切。它在Linux,Mac OS X,Solaris和FreeBSD上进行测试和支持。它完全用Python编写,因此安装不需要C编译器。

证明

虽然Supervisor今天非常积极开发,它不是新的软件。Supervisor已经存在多年,已经在许多服务器上使用。

Supervisor组件

supervisord

Supervisor的服务部分名称为 supervisord。它负责在自己的调用中启动子程序,响应来自客户端的命令,重新启动崩溃或退出的子进程,记录其子进程 stdoutstderr 输出,以及生成和处理对应于子进程生命周期中的点的“事件”。

服务器进程使用配置文件。这通常位于 /etc/supervisord.conf。此配置文件是一个“Windows-INI”样式的配置文件。通过适当的文件系统权限保持此文件安全是很重要的,因为它可能包含未加密的用户名和密码。

supervisorctl

Supervisor的命令行客户端名称为 supervisorctl。它为 supervisord 提供的功能提供了一个shell样界面。从 supervisorctl,用户可以连接到不同的 supervisord 进程,在由子进程控制的子进程上获取状态,停止和启动子进程,并获取 supervisord 的运行进程列表。

命令行客户端通过UNIX域套接字或Internet(TCP)套接字与服务器通信。服务器可以断言客户端的用户应该在其允许他执行命令之前呈现认证证书。客户端进程通常使用与服务器相同的配置文件,但任何具有 [supervisorctl] 部分的配置文件都可以工作。

网络服务器

如果您针对互联网套接字启动 supervisord,则可以通过浏览器访问具有与 supervisorctl 相当的功能的(稀疏)Web用户界面。访问服务器URL(例如 http://localhost:9001/),以在激活配置文件的 [inet_http_server] 部分后通过Web界面查看和控制进程状态。

XML-RPC接口

服务于web UI的相同HTTP服务器提供了一个XML-RPC接口,可用于询问和控制管理程序及其运行的程序。见 XML-RPC API文档

平台要求

Supervisor已经过测试,已知可在Linux(Ubuntu 9.10),Mac OS X(10.4/10.5/10.6)和Solaris(10 for Intel)和FreeBSD 6.1上运行。它可能在大多数UNIX系统上正常工作。

Supervisor将 not 运行在任何版本的Windows。

Supervisor已知与Python 2.4或更高版本工作,但不会在任何版本的Python 3下工作。