一、摘要

supervisor是一个进程管理工具,刚工作就接触到了,不过当时因为被脚本封装好了,所以都是直接用,对它的理解也仅仅是知道了有这么一个东西, 想着有机会了再深入了解。

一早因为机缘巧合要把oss挂载到主机,挂载的时候要用到supervisor,本来打算按照教程先搞一个,没想到中途遇到麻烦,走不下去了。没办法,只能先停下来好好钻研一下了,反正以后也要用到,于是就开始了一天的supervisor之旅。

supervisor是一个用python写的进程管理工具,可以很方便的用来启动、重启、关闭进程。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。

二、安装方法

安装有两种方式:

一种是直接使用yum命令安装,这种安装的好处是安装后不用设置链接,直接就能使用命令。

yum install supervisor

第二种是使用python的pip 工具安装,然后手动创建软链接:

pip install supervisor
# 安装后程序的二进制文件会存在python安装目录下的bin目录 
cd /usr/local/python27/bin
# 创建软链接
ln -s /usr/local/python27/bin/supervisorctl /usr/bin/supervisorctl
ln -s /usr/local/python27/bin/supervisord /usr/bin/supervisord

三、运行

supervisor 包含三大部分:supervisord supervisorctl 和我们的应用程序,supervisord 是服务端,supervistorctl 是客户端。

在命令行输入supervisord 即可运行服务端,通常会加上-c 选项来指定配置文件目录,服务端开启后使用supervisorctl 控制客户端,用法如下:

> status # 查看程序状态
> stop ** # 关闭程序
> start ** # 启动程序
> restart ** # 重启程序
> reload # 重启服务器
> update # 更新配置文件

四、服务端配置

默认配置

安装后会有个默认配置文件,位于/usr/local/python27/bin/ 目录下的echo_supervisord_conf
运行以重定向到默认的配置文件/etc/supervisord.conf 中:

/usr/local/python27/bin/echo_supervisord_conf >> /etc/supervisord.conf

配置说明

默认的配置为有很多,但是默认情况下需要用的很少,有一些需要我们去修改:

[unix_http_server]
# 这里是socket文件默认的目录,但是默认在tmp文件夹下
# 为了避免文件被删除,我们可以修改一下目录
;file=/tmp/supervisor.sock ; the path to the socket file
file=/var/run/supervisor.sock ; the path to the socket file
[supervisord]
# 日志文件目录,默认也是在tmp目录
logfile=/var/log/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
# pid文件目录
;pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
pidfile=/var/run/supervisord.pid ; supervisord pidfile; default supervisord.pid
[supervisorctl]
# 这里要和上面的配置目录一样
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

五、进程客户端的配置

详见:supervisor子进程的配置文件

最后修改:2017 年 09 月 23 日
如果觉得我的文章对你有用,请随意赞赏