Linux下如何安装并使用Supervisor
这篇文章主要为大家展示了“Linux下如何安装并使用Supervisor”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下如何安装并使用Supervisor”这篇文章吧。
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
安装
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)snumprocs=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 greproot 1170 1 0 18:57 ? 00:00:00 /usr/bin/python /usr/bin/supervisord
查看业务进程是否已经被拉起
$ supervisorctl statusmemcached 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 memcachedsupervisorctl stop memcachedsupervisorctl restart memcached
\3. 重启所有属于名为groupworker这个分组的进程
supervisorctl start groupworkersupervisorctl stop groupworkersupervisorctl restart groupworker
\4. 启、停、重启全部进程(不会载入最新的配置文件)
supervisorctl start allsupervisorctl stop allsupervisorctl restart all
\5. 重新加载配置文件,停止原有进程并按新的配置启动所有进程(注意:所有进程会停止并重启,线上操作慎重)
supervisorctl reload
\6. 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而被重启(注意:这才是线上可以操作的命令,不会重启原有进程)
supervisorctl update
注意:显示状态为stop停止掉的进程,用reload或者update都不会自动重启。
交互式
$ supervisorctlmemcached RUNNING pid 1256, uptime 0:01:47supervisor> stop memcachedmemcached: stoppedsupervisor> start memcachedmemcached: startedsupervisor> statusmemcached RUNNING pid 1258, uptime 0:00:04supervisor> restart memcachedmemcached: stoppedmemcached: startedsupervisor> statusmemcached RUNNING pid 1259, uptime 0:00:02supervisor>
故障处理
这几个故障都是我使用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下如何安装并使用Supervisor”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341