这篇文章主要为大家展示了“Linux下如何安装并使用Supervisor”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下如何安装并使用Supervisor”这篇文章吧。
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
Supervisor是基于python开发的,安装Supervisor前,需要先安装python,Supervisor可以通过pip或者easy_install安装。
$ yum install python-setuptools $ easy_install supervisor
或者,通过pip安装
$ pip install supervisor
主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。同时内置web server和XML-RPC Interface,轻松实现进程管理。
管理client,用户通过命令行发送消息给supervisord,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。
Superviosr提供了web server功能,可通过web控制进程。
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下如何安装并使用Supervisor”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。