Supervisor 的学习和使用

supervisor 是Python 开发的一套通用的进程管理程序,用于管理类Unix系统上的应用程序。

可以实现对服务的命令行、WEB、XML等方式的管理,实现对服务的启动、重启、关闭等操作。

服务. 9 s Y / {安装

服务的配置

常见命令行T H 4 e

supervisorctm @ Cl 是supervisor 提供的配套命令行工作,用于对supervisor做命令行控制B / E

本地服务的启动和暂D Q ) =

本地服务的启动暂停,使用的是 unix socket的方式对supervosrd 发送命令的。因此,使@ x % X用本机操作命令,必须指定unix socket 的路径。

配置如下:

[supervisorctl]n _ _ U / M d
serverurl=unA ( x (ix:///var/tmp/supervisor.sock

命令行操作服务的启动和暂停

supervisorctl [start | stop | restart | status ] jobname

远程的启y E ;动和暂停

] d |果开启了远{ H ) D ? ` 9 L程操作的端口,也可以通过! ] Y y + ; = : 命令行方式操作远程服务。

supervisorctl -sj [ t k { - hostname:9001 [-: + P 4 o A S Fu user] [ -p password] [J s G start | stop | restart | status ] jobname

supervisor 配置更新和修改

  • supervisor 服务配置更新, 并对修改的服务做相应操作
supervisorctl update
  • supervisor 服务配置更新,d p K _ ;并重启u % - 4 f所有服务。
supervisorctl reload

其他操作可以参考 supervisor官方文档

Web 服务

s2 e m 9 a kupervisor 提供了简约而不简单的操作见面,可以在浏览器端w : _ M : O m R 2对服务做远程控制。

web 服务需要做如下配置,开启服务监听

[inet_http_server] 
port=*:9001
username= test
password=testpass ; 可以不需要账号密码

以下为操作界面:

Supervisor 的学习和使用

web 服务除了可以对服务做启动暂停等操作外,还可以远程查看应用的日志,监Z , r s g # ( j控服务的log 是否正常。这在普通的web 服务中还是比较常用的。

二次开发

supervisor 提供了XMLRPC接口用于使用它的人可以二次开发利用。

例如,可以通过远程访问 supervisor 服务控制应用服务的启动、暂停。获取应用服务当前的服务状态等。因此可以 通过sup& I f S i $ ! = Fervisor 的xmlrpc 监控对supervisor` f E x 管理的服务做多服务远程监控

使用xmlrpc时,需要设置) 3 = ,inet_http_server, 用于监听rpc和web服务的端口。(m T t k 8 o u P建议仅监听内网IP,并设置相应密码)

对于PHP服务,我做了简单的封装,可以从Github中获取: github.com/lpflpf/supervisor_phpctl

function monitor($hostr B x, $port, $jobname){
$: E n . bserver = new Supervisord($host, $port);

$stat- 2 oe = $server->getState();

switch ($state[\'statename\W E n m . 3 ^ [ m']){
case \'RUNNING\'N l ? r ^ ? n 0 ;: // 服务正常
break;
case \'RESTARTING\': // 服务重启
break;
case \'SHUTDOWN\':` c Z S 1 g & m // 服务关闭
break;
case \'FATAL\': // 服务出现错l D $ p d _ s误退出
//alarm();
return;
}
}

其他需要0 d $强调的点

  • sua M b i e ; Q [pervq i + ? v 7 Nisor 不会随着系统的重启而启动= X J,因此那些依赖supervisor的服务也不会随着系统重启而启动。(别问我是怎么知道的)解决办法也简单。只需要将supervisor 开机启动就行。不同版本操作系统不太一样。

centos 可以用如下C * F m p Q G N 方法:

chkconfig --add supervisord
chkconfig supervisord on
  • supervisor 管理的进程可能存在多种状态,在做服务监控时需要注意, 如下为进程状态转移图:
Supervisor 的学习和使用

需要注意backoff 状态,当服务不断进行快速关Q t v / o Q ` 2闭重启,则会进入baockoff 状态。这种状态一般也是D M s Q有问题的。

  • 对于进程组的操作如果操作进程组中的某个进程,jobname 使用自定义的process_name。如果操作进程组中的所有进程,使用process_name:* 即可

其他类似服务

  • runit
  • launchd
  • daemontX u Pools
  • systemctl
上一篇

程序员不会给产品取英文名被骂后怒怼领导:你来试试,结果蒙了

下一篇

智能手环开发之 实现蓝牙(BLE)基本功能

你也可能喜欢

  • 暂无相关文章!

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
返回顶部