Supervisor 详解
2026/7/4 4:52:52 网站建设 项目流程

Supervisor 介绍

Supervisor 是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台守护进程,并监控进程状态,自动重启异常退出的进程,同时提供了命令行程序和 Web 界面用于查看、管理进程。

Supervisor 在大多数类 Unix 系统都可以正常工作,包括 Linux、Mac OS X 和 Solaris(10 for Intel)和 FreeBSD 6.1,但是不支持 Windows 平台。

最新版的 Supervisor 支持 Python 3(version 3.4 及以上)和 Python 2(version 2.7)。


为什么使用 Supervisor

我们的每台服务器都可能需要运行好几个进程,比如一个服务器往往同时存在 nginx、php-fpm 多个进程,对于执行定时任务的机器则往往会同时运行多个 CLI 进程任务。如果使用命令行方式一个一个去手动启动和停止显然非常麻烦、低效,而且任务如果异常退出、每次都靠人工去重启也不现实,另外查看每个进程的状态也很不方便。

Supervisor 可以对进程组统一管理,我们可以将需要管理的进程写到一个组里面,对这个组进行启动、停止、重启等等统一管理的操作。

官方网站:http://supervisord.org/


安装

1. 通过 pip 安装

pipinstallsupervisor

2. 通过 supervisor 包安装

下载地址:https://pypi.org/pypi/supervisor/,解压后运行:

python setup.pyinstall

3. 通过 setuptools 安装

下载地址:https://pypi.org/pypi/setuptools/,解压后运行:

python setup.pyinstall

创建配置文件

echo_supervisord_conf>/etc/supervisord.conf

启动 Supervisor

supervisord-c/etc/supervisord.conf

supervisor.conf 常用配置


子进程配置


supervisorctl 命令

查看进程状态

supervisorctl status

停止某一个进程

program_name[program:x]里的 x

supervisorctl stop program_name

启动某个进程

supervisorctl start program_name

重启某个进程

supervisorctl restart program_name

结束所有属于名为 groupworker 这个分组的进程

(start、restart 同理)

supervisorctl stop groupworker:

结束 groupworker:name1 这个进程

(start、restart 同理)

supervisorctl stop groupworker:name1

停止全部进程

注:start、restart、stop 都不会载入最新的配置文件

supervisorctl stop all

载入最新的配置文件

停止原有进程并按新的配置启动、管理所有进程

supervisorctl reload

根据最新的配置文件更新进程

启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启

supervisorctl update

supervisord-monitor 集群管理

为什么使用 supervisord-monitor?

假如一个公司有多个服务器,每台服务器上面都部署了 Supervisor 服务,更改某个 Supervisor 服务时都需要登录对应的服务器,那么管理起来就很不方便。而使用 supervisor-monitor 就可以通过简单配置就能将所有服务器上的 Supervisor 服务呈现在一个 Web 管理面板上,提高管理效率。

supervisor-monitor 是通过XML-RPC(远程方法调用,通过 HTTP 传输 XML 来实现远程过程调用的 RPC)进行管理多台服务器上的 Supervisor 服务进程的。

GitHub:https://github.com/slevomat/supervisord-monitor


XML-RPC API

API 列表

API 方法说明
getAllProcessInfo()获取所有进程列表信息
startProcess(name, wait=True)开启进程,name:进程名称,wait:等待进程完全启动时间
startAllProcesses(wait=True)开启所有进程
startProcessGroup(name, wait=True)开启进程组
stopProcess(name, wait=True)停止进程
stopProcessGroup(name, wait=True)停止进程组
addProcessGroup(name)添加进程组
removeProcessGroup(name)移除进程组
reloadConfig()载入最新修改的配置
readProcessStderrLog(name, offset, length)读取日志
clearProcessLogs(name)清空日志

注意:XML-RPC API 没有重启进程(supervisor restart groupworker)和更新进程 API(supervisor update)


实现方案

1. 实现重启进程方案

stopProcess停止进程,再startProcess开启进程。

2. 实现更新进程方案

  • 当删除进程组时:先stopProcessGroup,再removeProcessGroup
  • 当新添加进程组时addProcessGroup
  • 当修改进程组时:先stopProcessGroup,再removeProcessGroup,最后addProcessGroup

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询