1、简介

supervisor是python开发的一个进程管理工具,可以将一个普通的命令行进程变为后台的守护进程,并且监控进程的运行状态,如果因为异常退出的时候会自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

  • supervisord

运行superior的时候会启动一个进程superiord,他主要是负责启动所管理的进程,并且将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃的时候自动重启

  • supervisorctl

它是supervisor的命令行管理工具,可以执行stop,start,restart,status,update等指令,来对这些子进程进行管理。

supervisor是所有进程的父进程,管理所有的子进程,supervisor以子进程的PID来管理子进程,当子进程异常退出的时候supervisor可以收到相应的信号量

2、安装supervisor

因为supervisor是基于python来运行的,所以我们的服务器上必须有python环境,但是如果你服务器上跑的是django或者其他的python项目必然基于python环境,如果supervisor管理的后台服务比较多的话肯定会有一些影响,所以supervisor的安装会创建一个新的虚拟环境。

1、安装Python3.8.2

# 下载python
> wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz # 解压安装包
> tar -xf Python-3.8.2.tar.xz # 进入目标文件
> cd Python-3.8.2 # 配置安装目录
> ./configure --prefix=/usr/local/python3 # 编译&安装
> make && sudo make install # 建立软连接:python3,pip3
> ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
> ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3 # 删除安装包与文件
> rm -rf Python-3.8.2
> rm -rf Python-3.8.2.tar.xz

2、安装python虚拟环境

# 1、安装工具包
> pip3 install virtualenv
> pip3 install virtualenvwrapper # 注意:有些解释器无法直接安装virtualenvwrapper包,可能是因为缺少依赖,可以先安装一下下面两个包
> pip3 install pbr
> pip3 install stevedore # 2、建立虚拟环境软链接
> ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv # 3、配置虚拟环境对应环境变量
> vim ~/.bash_profile export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
# 指定virtualenv的路径
source /usr/local/bin/virtualenvwrapper.sh # 4、更新配置文件内容 > source ~/.bash_profile 所有的虚拟环境文件都指定存放在~/.virtualenvs 目录

3、创建python虚拟环境

# 1、创建虚拟环境
> mkvirtualenv supervisor_env # 虚拟环境名称 # 2、管理虚拟环境
> workon # 进入虚拟环境只需要在后面加上虚拟环境名称 # 3、退出虚拟环境
> deactivate

4、supervisor安装

# 安装
> pip install supervisor # 生成配置文件
> echo_supervisord_conf > supervisord.conf

3、配置supervisor

5、superiord.conf

# 指定socket文件路径
[unix_http_server]
file=/root/work/manager/supervisor/supervisor.sock ; the path to the socket file [supervisord]
logfile=/root/work/manager/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/root/work/manager/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
silent=false ; no logs to stdout if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200 [supervisorctl]
serverurl=unix:///root/work/manager/supervisor/supervisor.sock ; use a unix:// URL for a unix socket # 指定分发所有子进程的配置目录,默认子进程配置文件为ini格式
[include]
files = conf.d/*.ini

6、例:conf.d/onlydaya.ini

将不同分类的子进程单独使用配置文件,便于后期管理。下面的例子是后台启动uwsgi

# 项目名称
[program:onlydata]
# 脚本目录
directory=/root/work/code/python/onlydata
# 脚本执行命令
command=/root/.virtualenvs/onlydata/bin/uwsgi --ini /root/work/code/python/onlydata/onlydata/uwsgi.ini
# 日志输出
stderr_logfile=/root/work/code/python/onlydata/uwsgi.err.log
stdout_logfile=/root/work/code/python/onlydata/uwsgi.out.log
# 脚本运行的用户身份
user=root
stopsignal=INT
# 这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs=1

4、supervisor常用命令

supervisorctl status        //查看所有进程的状态
supervisorctl stop es //停止es
supervisorctl start es //启动es
supervisorctl restart //重启es
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序

也可以通过supervisorctl进入supervisor的shell界面,直接进行命令操作

补充:

systemctl start supervisord.service     //启动supervisor并加载默认配置文件
systemctl enable supervisord.service //将supervisor加入开机启动项

Supervisor通用配置的更多相关文章

  1. Supervisor 的配置与使用

    环境:ubuntu 14.04 lts  http://supervisord.org/liunx 下有很多守护进程的工具,如 nohup,screen,supervisor 等,supervisor ...

  2. Abp通用配置模块的设计

    引言 约定优于配置,配置趋于灵活 约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处, ...

  3. laravel 守护进程Supervisor的配置

    安装Supervisor Supervisor是Linux系统中常用的进程守护程序.如果队列进程queue:work意外关闭,它会自动重启启动队列进程.在Ubuntu安装Supervisor 非常简单 ...

  4. .Net Core Linux部署之进程守护 Supervisor 安装配置

    1.Supervisor 安装 //安装easy_install yum install python-setuptools //安装Supervisor easy_install superviso ...

  5. Kali Linux-装机后通用配置

    目录 前言 一. 网络优化 更换host 更换dns 添加源 二. 更新系统 三 .安装N卡驱动 四.修复 add-apt-repository 五.安装常用软件 安装apt自带的包 安装第三方的de ...

  6. ECharts图表——封装通用配置

    前言 前段时间在做大屏项目,大量用到echarts图表,大屏对设计规范要求比较高,而大屏项目,经常会因为业务方面的原因.或者是数据方面的原因改动UI设计,所有图表的代码也是三天一小改.五天一大改 因此 ...

  7. supervisor program配置实例

    program 配置 上面我们已经把 supervisrod 运行起来了,现在可以添加我们要管理的进程的配置文件.可以把所有配置项都写到 supervisord.conf 文件里,但并不推荐这样做,而 ...

  8. supervisor的配置

    看了下文档,比较多.http://www.supervisord.org/ 抱着试试又不会怀孕的心态,trying,碰了几鼻子灰,记录如下, 方便大家 1. 安装 easy_install super ...

  9. supervisor安装配置与使用

    supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...

随机推荐

  1. python检测“无内容”图片

    思路1:通过图像熵检测,“无内容”图像熵较小,可通过设置阈值检测“无内容”图像,计算图像熵可参考:https://www.cnblogs.com/niulang/p/12195152.html 思路2 ...

  2. vue全家桶(2.1)

    3.路由切换 3.1.vue-router路由切换 3.1.1.什么是前端路由 路由这个概念最先是后端出现的,发送不同的请求,后端根据请求的不同返回不同的资源,这个时候的url是和后端交互的,需要在后 ...

  3. Java BigDecimal和double BigDecimal类

    BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...

  4. django项目常见报错集

    1.mysqlclient 目前不支持高版本python3 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or new ...

  5. excel把按行合并的单元格重新拆分

    前言 今天帮朋友弄她excel表格的数据,发现excel表格合并之后,再拆分就不再同一行里面了,导致后面想要拆分回来非常头痛,如下图(下面的数据是模拟的): 可以看到第一例和其他例中间部分为合并的,此 ...

  6. Idea自带插件Groovy无法创建和启动

    前言 如果现在有人要开始完全重写 Java,那么 Groovy 就像是 Java 2.0.Groovy 并没有取代 Java,而是作为 Java 的补充,它提供了更简单.更灵活的语法,可以在运行时动态 ...

  7. MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称

    MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称   INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...

  8. P3574 FAR-FarmCraft 题解

    题目 In a village called Byteville, there are \(n\) houses connected with \(n-1\) roads. For each pair ...

  9. Problem C Emergency Evacuation 一道思维题

    题目描述 输入 输出 样例 样例输入 样例输入一 样例输入二 样例输出 样例输出一 9 样例输出二 1008 一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 分析 ...

  10. Python 数字格式转换

    # 数字格式转换v1 '''a = input() a1 = list(a) b = ["零", "一", "二", "三&quo ...