使用supervisor管理进程
原文连接:使用supervisor管理进程
一、摘要
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