良许Linux教程网 干货合集 Linux下安装并使用Supervisor

Linux下安装并使用Supervisor

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

Linux下安装并使用Supervisor

安装

Supervisor是基于python开发的,安装Supervisor前,需要先安装python,Supervisor可以通过pip或者easy_install安装。

通过easy_install安装

$ yum install python-setuptools
$ easy_install supervisor

或者,通过pip安装

$ pip install supervisor

结构

Supervisord

主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。同时内置web server和XML-RPC Interface,轻松实现进程管理。

Supervisorctl

管理client,用户通过命令行发送消息给supervisord,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。

Web server

Superviosr提供了web server功能,可通过web控制进程。

XML-RPC interface

XML-RPC接口,提供XML-RPC服务来对子进程进行管理,监控。

基本使用

Supervisor的配置文件命名为supervisord.conf,它为supervisord(Supervisor 的主服务命令) 和 supervisorctl(Supervisor 的监控管理命令) 提供配置选项设置。 Supervisor并不规定配置文件supervisord.conf的存放位置。Supervisor服务启动的时候默认会在:

$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf

这几个目录位置查找配置文件supervisord.conf,用yum安装的supervisor默认会生成/etc/supervisord.conf配置文件。Supervisor也提供参数 “-c” 来指定配置文件的目录路径。

如果你是编译安装,或其他系统,可以在终端输入”echo_supervisord_conf”命令查看Supervisor的默认配置的内容。其可以用来生成一份默认的配置文件:

$ echo_supervisord_conf > /etc/supervisord.conf

Supervisor的配置文件生成之后,现在可以添加我们要管理的进程的配置文件。可以把所有配置项都写到supervisord.conf文件里,但并不推荐这样做,而是通过include的方式把不同的程序(组)写到不同的配置文件里。要确保你的supervisord.conf配置文件中include包含了你自定义的配置文件包含进来,如下:

[include]
files = /etc/supervisord.d/*.conf

下面我们修改配置文件将memcached进程以deamon方式拉起(memcached进程也可以是一个shell或python脚本),并对此进行监控。

先在supervisor目录下创建一个配置文件,如下

$ cat /etc/supervisord.d/memcached.conf
[program:memcached]
# 启动程序的命令;
command = /usr/bin/memcached -m 5120 -p 11211 -u nobody -l 0.0.0.0 -b 65535
# 在supervisord启动的时候也自动启动;
autostart = true
# 程序异常退出后自动重启;
autorestart = true
# 启动5秒后没有异常退出,就当作已经正常启动了;
startsecs = 5
# 启动失败自动重试次数,默认是3;
startretries = 3
# 启动程序的用户;
user = nobody
# 把stderr重定向到stdout,默认false;
redirect_stderr = true
# 标准日志输出;
stdout_logfile=/data/log/memcached/out-memcache.log
# 错误日志输出;
stderr_logfile=/data/log/memcached/err-memcache.log
# 标准日志文件大小,默认50MB;
stdout_logfile_maxbytes = 20MB
# 标准日志文件备份数;
stdout_logfile_backups = 20

一份配置文件至少需要一个 [program:x] 部分的配置,来告诉supervisord 需要管理那个进程。[program:x]语法中的x表示program name,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行start、restart、stop等操作。日志文件要存放的文件夹要创建好。

使用supervisor还有一个更大的好处就是,可以快速开启多个进程,配置参数如下:

process_name=%(process_num)s
numprocs=3

表示对同一个配置开启3个线程。

启动supervisor,就会拉起memcached进程。

$ supervisord -c /etc/supervisor/supervisord.conf

ps:Supervisor启动后在/tmp目录会产生supervisord.log 、supervisord.pid 、supervisor.sock这三个文件,如果有问题可以查看日志。

查看Supervisor是否已经启动

$ ps -ef | grep supervisor | grep -v grep
root      1170     1  0 18:57 ?        00:00:00 /usr/bin/python /usr/bin/supervisord

查看业务进程是否已经被拉起

$ supervisorctl status
memcached                  RUNNING   pid 1230, uptime 0:04:39

停止Supervisor(子进程也会被停止,也可以针对单个程序进行start、update、restart、stop操作)

$ supervisorctl shutdown

使用supervisorctl命令

Supervisor可通过维护命令supervisorctl管理或通过web管理界面管理。维护命令supervisorctl有两种用法。一种是命令式,一种是交互式。

命令式

\1. 查询各进程运行状态

supervisorctl status

\2. 启、停、重启业务进程,memcached为进程名,即[program:memcached]里配置的值

supervisorctl start memcached
supervisorctl stop memcached
supervisorctl restart memcached

\3. 重启所有属于名为groupworker这个分组的进程

supervisorctl start groupworker
supervisorctl stop groupworker
supervisorctl restart groupworker

\4. 启、停、重启全部进程(不会载入最新的配置文件)

supervisorctl start all
supervisorctl stop all
supervisorctl restart all

\5. 重新加载配置文件,停止原有进程并按新的配置启动所有进程(注意:所有进程会停止并重启,线上操作慎重)

supervisorctl reload

\6. 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而被重启(注意:这才是线上可以操作的命令,不会重启原有进程)

supervisorctl update

注意:显示状态为stop停止掉的进程,用reload或者update都不会自动重启。

交互式

$ supervisorctl
memcached                       RUNNING   pid 1256, uptime 0:01:47
supervisor> stop memcached
memcached: stopped
supervisor> start memcached
memcached: started
supervisor> status
memcached                       RUNNING   pid 1258, uptime 0:00:04
supervisor> restart memcached
memcached: stopped
memcached: started
supervisor> status
memcached                       RUNNING   pid 1259, uptime 0:00:02
supervisor>

故障处理

这几个故障都是我使用supervisor时遇到的坑,帮你们填上。

supervisor 比较适合监控业务应用,且只能监控前台程序,如果你的程序是以daemon的方式启动,那么执行:supervisor status 会提示:BACKOFF Exited too quickly (process log may have details)。比如:memcached启动时加上-d选项就是以后台daemon启动,就不能使用supervisor监控了。

/usr/bin/memcached -d -m 5120 -p 11211 -u nobody -l 0.0.0.0 -b 65535

还有一个需要注意的,如果执行supervisor status时报错是:FATAL Exited too quickly (process log may have details),要检查一下是不是因为添加了user = nobody导致执行权限的问题。

如果出现这个错误:

Error: .ini file does not include supervisord section

For help, use /usr/bin/supervisord -h

就是你的自定义的程序配置文件格式有问题(/etc/supervisor/conf.d/*.conf),好好检查了。

其他

1)可以自己编写脚本将Supervisor加入chkconfig中,随系统自动启动。 或者可以使用现成的脚本: Supervisor initscripts。

2)除了supervisorctl 之外,还可以配置supervisrod启动web管理界面,这个web后台使用Basic Auth的方式进行身份认证。

3)除了单个进程的控制,还可以配置group,进行分组管理。经常查看日志文件,包括 supervisord的日志和各个 pragram 的日志文件,程序crash 或抛出异常的信息一半会输出到stderr,可以查看相应的日志文件来查找问题。

4)Supervisor有很丰富的功能,还有其他很多项配置,可以在官方文档获取更多信息:http://supervisord.org/index.html

以上就是良许教程网为各位朋友分享的Linux系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

img
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部