Supervisor是一款由python开发的(服务端/客户端)进程管理系统,对于平台的要求官网介绍是类unix系统,linux/macos应该是没问题的,windows不可使用。它的出现解决了众多业务服务进程之间管理混乱,维护成本高,低效的困扰,更侧重的是能够让各进程'健壮'生产。
安装
包管理工具
python写的小工具,Linux/MacOs都自带python环境,pip/pip3自然是最好的选择,能省去很多环境依赖困扰,安装请切换root用户f,如果想逆天可以选择后两种方法
pip/pip3 install supervisor
yum源安装
yum源安装也很方便,两行代码搞定
yum install python-setuptools
easy_install supervisor
源码文件python执行安装
wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz
tar zxvf supervisor-3.1.3.tar.gz
cd supervisor
python setup.py install
调试一下
小工具安装完后是默认添加到系统环境变量中的
测试
echo_supervisord_conf //查看默认配置文件,该命令执行成功说明安装成功
创建配置文件到指定位置(配置文件是系统的灵魂)
echo_supervisord_conf > /etc/supervisord.conf //输出配置文件到 /etc/ 目录下
启动
supervisord #默认去找$CWD/supervisord.conf,也就是当前目录,这种方式启动系统会提示加 -c 参数启动
supervisord -c /etc/supervisord.conf #到指定路径下去找配置文件,通过supervisor启动的进程都是在指定的配置文件中声明的
启动失败根据错误提示删除 /tmp/supervisor.sock 文件
客户端常用命令
查看所有任务状态 supervisorctl status
启动任务 supervisorctl start 服务名
停止任务 supervisorctl stop 服务名
重启任务 supervisorctl restart 服务名
增加/更新任务 supervisorctl update (相当于nginx的平滑重启,很适合生产环境)
重新启动配置中的所有程序 supervisorctl reload
名词定义
supervisord
supervisord是supervisor的服务端程序。当子进程挂了时候,会记录到日志文件中状态,保障你的进程啥时候也丢不了
supervisorctl
客户端操作程序 cli工具,使用supervisorctl来操作supervisor服务
Web Server
Web Server主要可以在界面上管理进程(图形化客户端工具),真没啥卵用,命令行才是王道
XML_RPC接口
我也不太清楚,暂且把它当做一种c/s之间传输格式吧
配置文件(.ini格式)
这个东西比较重要,官网上的解释更加详细,这里列举几个常见的配置快
unix_http_server 配置下 file,这玩意儿很重要,掌管客户端服务端之间通讯大权,和nginx转发php-fpm sock unix通讯方式很类似,这个配置快下还可设置用户认证相关东西,例如账号密码(感觉人家都能登录你服务器了,账号密码设置还有啥意义)
inet_http_server 这个就是上文说道的 web 管理页面了,配置一些端口,认证之类的
supervisord 服务端配置快,一般的小项目和后端码农,配个 logfile 运行日志就行,精确运维这里不多说(咱没用过后面几个,没发言权)
supervisorctl 客户端配置块,和服务端雷同
program:gramname 子进程代码块
1. gramname 子进程的名称,自定义
2. command 要运行的子进程 路径
3. process_name 这个东西可理解为一个进程要开几个(进程池)进程名,下面有个process_name 设置进程数,要是只开一个的话就忽略次选项(大批量爬虫进程用到此功能)
4. process_name 启动进程数量
5. directory 进程命令运行前,切换到此目录,超爽,能省点儿绝对路径代码
6. group:thegroupname 进程分组,更加强大的管理成整齐的进程,熟悉 web 开发小伙伴的话就理解成 路由分组吧
后面还有几个关于加载关闭优先级的设置,这里不多说了,如果你觉得进程过多,还可以通过引入文件方式,通过 include 配置块,files 配置,引入指定路径下配置,这样便于分块管理,看自己爱好了
demo
示例一个
[program:listenToHttp]
command=/usr/bin/env python2.7 -m SimpleHTTPServer 80
跑起来吧
nginx RUNNING pid 18752, uptime 22:59:40
redis RUNNING pid 14542, uptime 45 days, 19:18:08
sonyflakeserver FATAL can't find command 'go'
listenToHttp RUNNING pid 14952 uptime 17:59:40
sparkportal RUNNING pid 26073, uptime 1 day, 23:11:17
这是真的爽啊,进程再多也不怕,成功失败都可看。宕机误操作重启机,守护状态一个不丢。再也不用 netstat ps kill ..