Supervisor是由Python开发的用于监控类UNIX上进程运行状态的工具。在部署Python Web时,常常使用这样一种架构,即Nginx + Gunicorn + Supervisor + Django/Flask/Tornado/Webpy/Pyramid。Supervisor在这里起到的做用是监控Gunicorn,在Gunicorn宕掉后使其重启,加强系统的稳定性。推而广之,能够用Supervisor监控Tomcat,MySQL,Redis等。下面介绍一下其安装和使用。python
Supervisor只能运行在类UNIX系统中,如Linux,Mac OS和Solaris等,不支持任何版本的Windows系统。同时,Supervisor须要Python 2.4或更新版本的Python支持。redis
下面介绍两种安装方式。浏览器
在系统已安装pip且能够链接外网时,安装十分简单,pip install会和yum install、apt-get同样自动安装依赖文件:架构
[root@localhost ~]# pip install supervisor
手动安装又分为能够链接外网和不能链接外网的状况,均须要setuptools的支持,不然在python2.7
python setup.py install
时会报以下错误:socket
Traceback (most recent call last): File "setup.py", line 32, in <module> from setuptools import setup, find_packages ImportError: No module named setuptools
关于pip及setuptools的安装能够参考这里。ide
能够链接外网时,python setup.py install会自动安装依赖文件:工具
[root@localhost ~]# cd /usr/local/src [root@localhost src]# wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz [root@localhost src]# tar zxf supervisor-3.1.3.tar.gz [root@localhost src]# cd supervisor-3.1.3 [root@localhost supervisor-3.1.3]# python setup.py install
不能链接外网时,须要先手动安装Supervisor所依赖的文件,如下列出:ui
meld3url
其中,meld3是必须安装的,elementtree博主并未安装,依然能够成功,读者能够在安装完meld3后先试验一下,若是Supervisor能够安装成功,则可再也不安装elementtree。
安装依赖文件的方法请参考1.2.1
节,这里再也不赘述。
安装成功后,多出4个命令文件,分别为supervisord,supervisorctl,pidproxy,echo_supervisord_conf,这些命令文件位于python安装目录下(和pip配置有关),如/usr/local/python2.7.10/bin/supervisord
Supervisor的配置文件采用Windows ini文件的风格,以;
开头注释内容。使用安装Supervisor后产生的echo_supervisord_conf命令能够生成配置文件模板:
[root@localhost ~]# /usr/local/python2.7.10/bin/echo_supervisord_conf >> /etc/supervisord.conf
为了快速开始使用,仅对生成的配置文件模板作少量修改。详细的配置文件说明能够参考这里。
若是咱们以root用户启动Supervisor,须要在[supervisord]下指定user=root
:
[supervisord] ... user=root ...
启动Supervisor:
[root@localhost ~]# supervisord -c /etc/supervisord.conf
这里要说明的一点是,在运行Supervisor时,若是没有使用-c
选项指定所使用的配置文件,Supervisor会自动依次寻找如下位置的配置文件:
$CWD/supervisord.conf $CWD/etc/supervisord.conf /etc/supervisord.conf
若是在这些位置没有找到配置文件,会报以下错误信息:
Error: No config file found at default paths (/usr/etc/supervisord.conf, /usr/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf); use the -c option to specify a config file at a different path
修改配置文件,在[program:custom_name]
添加配置,这里咱们以监控redis为例:
[program:redis_monitor] command=/usr/local/redis/bin/redis-server /etc/redis.conf ;指定监控的命令,重要 directory=/root ;指定命令运行的目录 autorestart=true ;指定在什么状况下自动重启 user=root ;指定以哪一个用户运行command命令 ;其余配置使用默认值便可
从新启动Supervisor,建议使用以下方式启动,将其放入后台,同时将supervisord的运行日志放入nohup.out
中:
[root@localhost ~]# nohup supervisord -n -c /etc/supervisord.conf &
supervisorctl
是一个Supervisor的命令行控制台,使用它能够方便的对supervisord
进行重启、关闭,也能够对单独的[program:custom_name]
进程监控进行启动、关闭等,当监控的进程较多时操做起来十分方便,可以作到选择性的启动、关闭被监控的进程。这里简单介绍一下它的用法。
在配置文件supervisord.conf
中有对supervisorctl
的配置,
[unix_http_server] ; 采用unix socket链接supervisord server,默认开启 file=/tmp/supervisor.sock ; 指定socket文件所在位置 ;chmod=0700 ; 指定socket文件权限,默认为0700 ;chown=nobody:nogroup ; 指定socket文件属主和属组 ;username=user ; 指定supervisorctl链接时须要使用的用户名,默认不需用户名 ;password=123 ; 指定supervisorctl链接时须要使用的密码,默认不需密码 ;[inet_http_server] ; 采用HTPP链接supervisord server,默认关闭 ;port=127.0.0.1:9001 ; 指定能够链接supervisord server的ip地址及其所使用的端口号,*:port针对任何ip开放链接权限 ;username=user ; 指定supervisorctl链接时须要使用的用户名,默认不需用户名 ;password=123 ; 指定supervisorctl链接时须要使用的密码,默认不需密码 [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; 使用unix socket链接supervisord server ;serverurl=http://127.0.0.1:9001 ; 使用HTTP链接supervisord server ;username=chris ; 指定链接server时使用的用户名 ;password=123 ; 指定链接server时使用的密码 ;prompt=mysupervisor ; 命令行提示符,默认为 supervisor> ;history_file=~/.sc_history ; 打开命令行历史记录,可使用↑↓键寻找历史命令
supervisorctl
不能用来远程打开supervisord
,使用以下命令链接已开启的Supervisord,其中-s
指定链接server的形式(unix socket/HTTP),-u
指定用户名,-p
指定密码:
[root@localhost ~]# supervisorctl -s unix:///tmp/supervisor.sock -u user -p 123
若是在配置文件中已经将这些参数在[supervisorctl]
中配置完成,可直接执行配置文件进行链接,链接后
[root@localhost ~]# supervisorctl -c /etc/supervisord.conf redis.monitor RUNNING pid 54662, uptime 0:49:38
链接成功后能够经过其中的help
命令查看可使用的命令及每条命令的做用:
supervisor> help default commands (type help <topic>): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version supervisor> help reload reload Restart the remote supervisord.
针对每条命令的做用这里再也不赘述,另外说明一点,当开启[inet_http_server]
时能够从浏览器中查看supervisord
运行状态,读者能够本身尝试一下。
Supervisor不止能够监控进程,还有其余功能,这里咱们只介绍了这个经常使用功能,有兴趣的读者能够参考其官方文档。
完。