Supervisor使用(上)

前言

supervisor 由两大件组成:

  • supervisord
  • supervisorctl

supervisord:主服务。负责自身的一些调用以及子进程的管理、响应来自客户端的命令、重启挂掉的子进程、记录子进程的日志、生成处理子进程各个生命节点的事件等等任务。

supervisorctl:提供了一个 shell 交互窗口。由此,我们可以和 supervisord 中的任意一个进程/子进程通信,获取进程的状态、控制子进程的启停,以及当前 supervisord 的进程运行列表。

supervisord、supervisorctl 的配置文件通常存在同一份配置文件中:supervisord.conf

安装

搞简单点,直接用 pip 安装:

1
pip install supervisor

我是直接用 pyenv 安装了一个 Python2 的环境,然后用 Python2 安装(Python3 版本的 supervisor coming soon ..)。

关于 pyenv 的使用可以参考这篇。

然后用 pyenv 设置:

1
pyenv global My_ENV 2.7.15

这样默认还是使用常用的虚拟环境,辅以 Python2,完美。

Hello World

我们尝试监控一个简单的程序。

配置 配置文件

正确安装完之后,直接在 shell 中输入 echo_supervisord_conf 回车就会出现官方默认的一个配置信息,我们新建一个项目文件夹,并把该文件存在该项目文件夹中:

1
2
$ cd my_super_pro
$ echo_supervisord_conf > ./supervisord.conf

打开这个配置文件,我们做一些个性化的修改:

1
2
3
4
# 在文件末尾添加一个 [program:foo] section

[program:foo]
command=/bin/cat

保存之后就可以启动 supervisord 看看效果了:

1
$ supervisord

因为我们的配置文件就在当前启动目录下,而且名字就叫 supervisord.conf,所以 supervisord 能找到这个配置文件。

如果我们的配置文件不在启动的目录下,或者名字不交 supervisord.conf,就需要通过 -c 参数来指定相应的配置文件路径。

启动之后,我们就可以通过 supervisorctl 这个工具来管理启动的 supervisord 和对应的子进程。

查询子进程状态:

1
$ supervisorctl status

1
foo     RUNNING   pid 87215, uptime 0:00:03

结束所有子进程:

1
$ supervisorctl stop all

1
foo: stopped

启动子进程:

1
$ supervisorctl start foo

1
foo: started

可见我们的 foo 程序已经启动了。supervisor 大致的使用流程就如上所示,其他的就是一些细节的配置、调整。

P.S. 关注我的公众号,第一时间接收更新提醒。


公众号二维码