Supervisor 详解
Supervisor 介绍Supervisor 是用 Python 开发的一套通用的进程管理程序能将一个普通的命令行进程变为后台守护进程并监控进程状态自动重启异常退出的进程同时提供了命令行程序和 Web 界面用于查看、管理进程。Supervisor 在大多数类 Unix 系统都可以正常工作包括 Linux、Mac OS X 和 Solaris10 for Intel和 FreeBSD 6.1但是不支持 Windows 平台。最新版的 Supervisor 支持 Python 3version 3.4 及以上和 Python 2version 2.7。为什么使用 Supervisor我们的每台服务器都可能需要运行好几个进程比如一个服务器往往同时存在 nginx、php-fpm 多个进程对于执行定时任务的机器则往往会同时运行多个 CLI 进程任务。如果使用命令行方式一个一个去手动启动和停止显然非常麻烦、低效而且任务如果异常退出、每次都靠人工去重启也不现实另外查看每个进程的状态也很不方便。Supervisor 可以对进程组统一管理我们可以将需要管理的进程写到一个组里面对这个组进行启动、停止、重启等等统一管理的操作。官方网站http://supervisord.org/安装1. 通过 pip 安装pipinstallsupervisor2. 通过 supervisor 包安装下载地址https://pypi.org/pypi/supervisor/解压后运行python setup.pyinstall3. 通过 setuptools 安装下载地址https://pypi.org/pypi/setuptools/解压后运行python setup.pyinstall创建配置文件echo_supervisord_conf/etc/supervisord.conf启动 Supervisorsupervisord-c/etc/supervisord.confsupervisor.conf 常用配置子进程配置supervisorctl 命令查看进程状态supervisorctl status停止某一个进程program_name为[program:x]里的 xsupervisorctl 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 updatesupervisord-monitor 集群管理为什么使用 supervisord-monitor假如一个公司有多个服务器每台服务器上面都部署了 Supervisor 服务更改某个 Supervisor 服务时都需要登录对应的服务器那么管理起来就很不方便。而使用 supervisor-monitor 就可以通过简单配置就能将所有服务器上的 Supervisor 服务呈现在一个 Web 管理面板上提高管理效率。supervisor-monitor 是通过XML-RPC远程方法调用通过 HTTP 传输 XML 来实现远程过程调用的 RPC进行管理多台服务器上的 Supervisor 服务进程的。GitHubhttps://github.com/slevomat/supervisord-monitorXML-RPC APIAPI 列表API 方法说明getAllProcessInfo()获取所有进程列表信息startProcess(name, waitTrue)开启进程name进程名称wait等待进程完全启动时间startAllProcesses(waitTrue)开启所有进程startProcessGroup(name, waitTrue)开启进程组stopProcess(name, waitTrue)停止进程stopProcessGroup(name, waitTrue)停止进程组addProcessGroup(name)添加进程组removeProcessGroup(name)移除进程组reloadConfig()载入最新修改的配置readProcessStderrLog(name, offset, length)读取日志clearProcessLogs(name)清空日志注意XML-RPC API 没有重启进程supervisor restart groupworker和更新进程 APIsupervisor update实现方案1. 实现重启进程方案先stopProcess停止进程再startProcess开启进程。2. 实现更新进程方案当删除进程组时先stopProcessGroup再removeProcessGroup当新添加进程组时addProcessGroup当修改进程组时先stopProcessGroup再removeProcessGroup最后addProcessGroup