如何使用supervisor管理你的应用
1、前言
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是UNIX-like系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。
提供的高可用场景,当你的程序出现异常,例如core/内存溢出等,导致服务进程被杀死,这个时候supervisort监听到进程终止后,会自动将它重新拉起。
2、安装
supervisor是基于python开发的,所以安装时首先要保证有python环境,当然最好已经安装了如下工具。
pip:python的包管理工具
virtualenv:虚拟沙盒环境
当安装方式很简单。
pip install supervisor
supervisor是一个C/S架构的工具。安装完成后,会生成三个执行程序:
1)supervisortd:守护进程服务(用于接收进程管理命令)
2)supervisorctl:客户端(用于和守护进程通信,发送管理进程的指令)
3)echo_supervisord_conf:生成初始配置文件程序
3、配置
运行supervisor服务的时候,需要指定supervisor的配置文件,有两种方式:
1)显式的指定
可以通过-c参数显式的指定supervior配置文件,灵活性高
$SUPERVISOR/bin/supervisorctl -c $SUPERVISOR/conf/supervisord.conf start CIServer
2)非显式的指定
如果没有显示指定的话,supervisor会在如下路径下找配置文件:
$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
../etc/supervisord.conf (Relative to the executable)
../supervisord.conf (Relative to the executable)
初始配置文件的生成,使用如下命令
echo_supervisord_conf > /etc/supervisor/supervisord.conf
4、配置文件参数说明
一般来说,配置管理我们采用supervisor+program的方式。
将supervisor的配置文件,和管理进程的配置文件区分开,这样的好处是,当有多个进程需要管理的时候,不会互相干扰。
下面分开说明一下。
1)配置supervisor
先粘上我使用的supervisor配置,后面再详细讲解。
[unix_http_server]
file=/home/kangaroo/supervisor/run/supervisor.sock ;必须,UNIX socket文件,supervisorctl 会使用
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server)) ;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server)) [supervisord]
logfile=/home/kangaroo/supervisor/log/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10 ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info ;日志级别,默认info,其它: debug,warn,trace
pidfile=/home/kangaroo/supervisor/run/supervisord.pid ;进程pid文件 supervisord.pid
nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024 ;可以打开的文件描述符的最小值,默认 1024
minprocs=200 ;可以打开的进程数的最小值,默认 200 ; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl]
serverurl=unix:///home/kangaroo/supervisor/run/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致 [include]
files = /home/kangaroo/supervisor/supervisor.d/*.conf
2)配置program进程
可以看到上面文件中有[include]项,这个项指定了在/home/kangaroo/supervisor/supervisor.d/*.conf路径下的配置文件也会被加载进来。
一般来说我们会在这些配置文件里管理进程的配置。
vim /home/kangaroo/supervisor/supervisor.d/CIServer.conf
配置内容
[program:CIServer] ; 程序名称,可以通过ctl指定名称进行控制
directory = /home/kangaroo/build/CIServer ; 程序的启动目录
command = python manage.py runserver --noreload 0.0.0.0:8200 ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = xiaoju ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /home/kangaroo/supervisor/log/supervior.log
这样就配置完成了。
5、启动supervisor管理服务
supervisord -c /etc/supervisor/supervisord.conf
这样,进程就被启动并且管理起来了。
6、client的命令
最后补充上一些supervisorctl的命令供参考
supervisorctl start CIServer # 启动,配置文件中要配置program:CIServer
supervisorctl stop CIServer # 关闭
supervisorctl restart CIServer # 重启
supervisorctl status # 查看管理进程的状态
如何使用supervisor管理你的应用的更多相关文章
- Supervisor 管理后台守护进程
Supervisor 管理后台守护进程 参考原文如下: http://codinn.com/people/brant/notes/110948/ 做了一些注释 +++++++++++引用开始+++++ ...
- Supervisor管理进程
Supervisor管理进程 转载 2016年04月14日 18:26:45 标签: supervisord 28344 Supervisor重新加载配置启动新的进程 liaojie 发布于 1年前, ...
- 配置supervisor管理beego应用
一.golang.beego等环境安装与配置 二.supervisor安装 github项目地址:https://github.com/Supervisor/supervisor 克隆项目:git c ...
- supervisor管理进程工具配置
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...
- Supervisor 管理进程,Cloud Insight 监控进程,完美!
Supervisor 是由 Python 语言编写.基于 linux 操作系统的一款服务器管理工具,用于监控服务器的运行,发现问题能立即自动预警及自动重启等. Cloud Insight 是一款次世代 ...
- supervisor管理进程 superlance对进程状态报警
supervisor介绍 首先,介绍一下supervisor.Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linu ...
- 使用Supervisor管理Linux进程
使用Supervisor管理Linux进程 简介 Supervisor是一个C/S系统,它可以在类UNIX系统上控制系统进程,由python编写,提供了大量的功能来实现对进程的管理. 安装 sudo ...
- 使用supervisor管理后台进程
在linux中supervisor是用来管理后台进程的,是一个用python写的进程管理工具,可以让宕机的进程重启.这里我们大概讲一下用他来管理uWSGI. 一.安装supervisor 1.pyth ...
- 【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践
supervisor安装启动: apt-get install supervisor -y # start supervisord nodaemon /usr/bin/supervisord --no ...
随机推荐
- 一个不可思议的MySQL慢查分析与解决
转自:http://fordba.com/optimize-an-amazing-mysql-slowlog.html?hmsr=toutiao.io&utm_medium=toutiao.i ...
- maven核心概念--插件和目标
maven的核心概念有很多,我们这里先来看Plugins和Goals. 在上一篇博客中,我们用两种类型的命令行参数运行了Maven. 第一条命令,create.这是一条单个的插件目标,Archetyp ...
- 以C语言为例的程序性能优化 --《深入理解计算机系统》第五章读书笔记
其实大多数的编译器本身就能提供一些简单的优化,比如gcc就能通过使用 -O2 或者 -O3 的选项来优化程序.但编译器的优化始终也是有限,因为它必须小心翼翼保证优化过程不对程序的功能有改动.故而程序员 ...
- Spring MVC的优势
Spring 框架提供了构建Web应用程序的全功能MVC模块--Spring MVC. Spring MVC框架提供了一个DispatcherServlet作为前端控制器来分派请求,同时提供灵活的配置 ...
- spring实例化bean三种方式
我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ...
- 多线程访问DataTable
项目中需要读取数据库中的多张表.由于表的数据比较多,串行读取时耗时比较多,所以对程序做了一点优化. 环境 .NET 3.5,SQL Server 2012,Visual Studio 2015 过程 ...
- Nginx负载均衡搭建(Window与Linux)
windows上搭建nginx负载均衡 1.准备几台http服务器软件,这里选用一台apache一台tomcat apache(windows)下载链接:https://www.apachehaus. ...
- Laravel (5.5.33) 加载过程(一)
说明: 由于公司项目使用Laravel 框架 也是第一次接触此框架 作为一个新手 记录使用过程的一些事情 以及对于框架源码分析的记录 整理自己的思路 也希望对大家有帮助 如果那里不对的地方 ...
- jQuery源码研究——解决命名冲突
在项目中难免不去使用多个插件,如此一来这些插件就有可能出现一样的名称,当出现同名变量时后一个将会覆盖上一个,这样的话我们就无法同时使用多个插件了. 当遇到这种情况我们可以手动去修改插件源码把它的名字改 ...
- docker 报错:x509: certificate has expired or is not yet valid
环境:centos 7 程序:docker 下载镜像报错: # docker pull centos Pulling repository centos FATA[0004] Get https:// ...