如何使用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                  ;可以打开的文件描述符的最小值,默认 1024minprocs=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 # 查看管理进程的状态

原文地址:https://www.cnblogs.com/kangoroo/p/8494274.html

时间: 2024-10-11 06:27:05

如何使用supervisor管理你的应用的相关文章

【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践

supervisor安装启动: apt-get install supervisor -y # start supervisord nodaemon /usr/bin/supervisord --nodaemon nginx示例: [program:nginx] command = /usr/sbin/nginx -g 'daemon off;' process_name = %(program_name)s stopsignal = QUIT autostart = true # starts

celery和supervisor配合使用,实现supervisor管理celery进程

在这里我选择redis作为celery异步任务的中间人,系统选择CentOS6.5 64位.redis.celery和supervisor的安装参见官方文档. 安装完毕后: 1, 创建celery的实例/home/user_00/learn/tasks.py文件 tasks.py: # -*-coding:utf-8-*- from celery import Celery, platforms app = Celery('tasks', backend='redis://localhost:6

docker之使用supervisor管理多个进程

docker题外话: centos7安装supervisor: 源码编译安装: 下载源码文件:supervisor-3.3.1.tar.gz 下载地址:https://pypi.python.org/pypi/supervisor 安装: [[email protected] src]# tar -zxf supervisor-3.3.1.tar.gz [[email protected] src]# cd supervisor-3.3.1/ [[email protected] supervi

配置supervisor管理beego应用

一.golang.beego等环境安装与配置 二.supervisor安装 github项目地址:https://github.com/Supervisor/supervisor 克隆项目:git clone https://github.com/Supervisor/supervisor.git 进入项目:cd supervisor 安装执行:python setup.py install 三.supervisor配置文件 官方文档-配置部分 vi /etc/supervisord.conf

supervisor管理后台进程

在linux中supervisor是用来管理后台进程的,是一个用python写的进程管理工具,可以让宕机的进程重启.这里我们大概讲一下用他来管理uWSGI. 一.安装supervisor 1.python2下的安装 supervisor不支持python3,所以你安装可以使用自带的python2安装,但是自带的python2没有安装pip (1)要安装pip,首先要安装setuptools wget https://pypi.python.org/packages/ff/d4/209f4939c

ELK之ES2.4.1双实例平滑升级至5.2.1踩坑并supervisor管理记

ES老集群用的2.4.1版本,跑的比较好就一直没动,最近看资料ES5.X已经稳定,并且性能有较大提升,心里就发痒了,但由于业务要保持高可以用的属性,就得想一个平滑升级的方案,最后想到了多实例过度的办法,5.X版本网上介绍配置变化较大,也做好了踩坑准备,确定好要升级后,立刻动手. 一.对应升级改造方案 使用端口9220和9330 安装并配置好新的ES5.2.1实例-->关掉logstash并将ES2.4.1实例堆栈调小重启(kafka保留3个小时日志所以不会丢失)-->启动ES5.2.1并将lo

使用Supervisor管理进程二

supervisor安装完成后会生成三个执行程序:supervisortd.supervisorctl.echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令).客户端(用于和守护进程通信,发送管理进程的指令).生成初始配置文件程序. 3.配置 运行supervisord服务的时候,需要指定supervisor配置文件,如果没有显示指定,默认在以下目录查找: $CWD/supervisord.conf$CWD/etc/supervisord.c

docker supervisor管理进程

一.使用supervisor来管理 supervisor:进程管理工具,基于C/S架构.(其提供web接口给用户查询和 控制),它允许用户去监控和控制在类unix系统的进程. 使用supervisor可以更好的控制.管理.重启我们希望运行的进程. 在这演示一下如何同时使用ssh和 apache 服务.(通过docker buid生成新镜像) 配置 1.首先创建一个dockerfile目录 dockerfile文件内容 supervisor配置文件内容 第一段supervsord配置软件本身,使用

使用Supervisor管理Celery进程。

讲过一篇celery的,但是celery启动后并不是daemon的,在生产环境中这肯定是不可以的,那怎么办呢? 这就需要使用supervisor进行进程管理了,下面详细介绍. 一. supervisor是干什么的. supervisor是有Python语言编写的,基于linux操作系统的一款服务器管理工具,用以监控服务器进程的运行. supervisor要求管理的程序是非daemon程序,supervisord会帮你把他转换成daemon程序. 因此如果使用supervisor来管理nginx进