温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

工作积累(十二)——Supervisor安装及使用

发布时间:2020-07-12 09:47:04 来源:网络 阅读:6852 作者:细桶假狗屎 栏目:系统运维

Supervisor是由Python开发的用于监控类UNIX上进程运行状态的工具。在部署Python Web时,经常使用这样一种架构,即Nginx + Gunicorn + Supervisor + Django/Flask/Tornado/Webpy/Pyramid。Supervisor在这里起到的作用是监控Gunicorn,在Gunicorn宕掉后使其重启,增强系统的稳定性。推而广之,可以用Supervisor监控Tomcat,MySQLRedis等。下面介绍一下其安装和使用。

1. 安装

Supervisor只能运行在类UNIX系统中,如Linux,Mac OS和Solaris等,不支持任何版本的Windows系统。同时,Supervisor需要Python 2.4或更新版本的Python支持。

下面介绍两种安装方式。

1.1 pip方式

在系统已安装pip且可以连接外网时,安装十分简单,pip install会和yum install、apt-get一样自动安装依赖文件:

[root@localhost ~]# pip install supervisor
1.2 手动安装

手动安装又分为可以连接外网和不能连接外网的情况,均需要setuptools的支持,否则在

python setup.py install

时会报如下错误:

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的安装可以参考这里。

1.2.1 可以连接外网

可以连接外网时,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
1.2.1 不能连接外网

不能连接外网时,需要先手动安装Supervisor所依赖的文件,以下列出:

meld3

elementtree

其中,meld3是必须安装的,elementtree博主并未安装,依然可以成功,读者可以在安装完meld3后先试验一下,如果Supervisor可以安装成功,则可不再安装elementtree。

安装依赖文件的方法请参考1.2.1节,这里不再赘述。

安装成功后,多出4个命令文件,分别为supervisord,supervisorctl,pidproxy,echo_supervisord_conf,这些命令文件位于python安装目录下(和pip配置有关),如/usr/local/python2.7.10/bin/supervisord

2. 使用

Supervisor的配置文件采用Windows ini文件的风格,以;开头注释内容。使用安装Supervisor后产生的echo_supervisord_conf命令可以生成配置文件模板:

[root@localhost ~]# /usr/local/python2.7.10/bin/echo_supervisord_conf >> /etc/supervisord.conf

为了快速开始使用,仅对生成的配置文件模板做少许修改。详细的配置文件说明可以参考这里。

2.1 以root用户启动Supervisor

如果我们以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
2.2 监控进程

修改配置文件,在[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 &
2.3 supervisorctl

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不止可以监控进程,还有其他功能,这里我们只介绍了这个常用功能,有兴趣的读者可以参考其官方文档。

完。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI