文档章节

Supervisor

lionets
 lionets
发布于 2016/12/12 21:25
字数 492
阅读 31
收藏 0

配置文件


创建的默认配置文件本身包含好几个项目,他们的功能分别是:

unix_http_server 提供一个 Unix socket 的接口,这是 supervisorctl 默认使用的接口,用于和 supervisord 通信。

如果想让一个虚拟环境只负责一组进程,而不是创建一个全局的 supervisord 的话,这里面的 file 项就应该改成一个特有的文件名,而不是默认的 /tmp/supervisord.sock

inet_http_server 提供网络 socket 接口,可以支持 xmlrpc 通信。可以替代 Unix socket,也可以一起开。当然用不上的话也可以不开。

supervisord 主进程,有需要的话配一下他的日志 和 pid 文件路径。

supervisorctl,控制进程,serverurl 要和上面的保持一致。即你开的是哪一种 server,然后配的分别是什么地址。

最后就是你的真正进程的配置了。注意 directory 项记得配,不然容易出现路径问题。

进程监控

如果要通过脚本定时监控进程状态,可以有两种方法。背后其实就是你开的两种不同 server。

一是通过 supervisorctl 访问 Unix socket,二是通过 xmlrpc 访问 inet。

第一种,直接从 supervisor 包引入组件,缺点是有虚拟环境依赖。


from supervisor.supervisorctl import Controller
from supervisor.options import ClientOptions
from cStringIO import StringIO

ST_OK = ''

def check_process_status(process_name):
    std_cap = StringIO()
    args = ['-c', '/etc/supervisord.conf', 'status']
    options = ClientOptions()
    options.realize(args, doc=__doc__)
    controller = Controller(options)
    controller.stdout = std_cap
    try:
        controller.onecmd(" ".join(options.args))
    except Exception as e:
        return str(e)
    else:
        std_cap.seek(0, 0)
        for line in std_cap:
            output = filter(bool, line.split(' '))
            if output and output[0] == process_name:
                if output[1] in ['STOPPED', 'BACKOFF', 'EXITED', 'FATAL', 'UNKNOWN']:
                    return ' '.join(output)
                else:
                    return ST_OK
    return 'process: %s not found in supervisorctl.' % process_name

另一种是通过内建的 xmlrpc 包访问 supervisord 的 inet 接口。这需要在启动 supervisord 的时候打开 inet 选项。

import xmlrpclib

ST_OK = ''
SUPERVISOR_RPC = 'http://localhost:9002/RPC2'

def check_process_state(process='linking_api'):
    server = xmlrpclib.Server(SUPERVISOR_RPC)
    try:
        process_info = server.supervisor.getProcessInfo(process)
        assert isinstance(process_info, dict), 'Invalid supervisor rpc return.'
    except Exception as e:
        return str(e)
    else:
        state = process_info.get('statename')
        if state in ['STARTING', 'RUNNING', 'STOPPING']:
            return ST_OK
        else:
            return '%s: %s' % (process_info.get('name'), state)

© 著作权归作者所有

共有 人打赏支持
lionets
粉丝 91
博文 98
码字总数 132850
作品 0
朝阳
程序员
私信 提问
(整理)用Elixir做一个多人扑克游戏 3

今天我们将为德州扑克游戏添加故障恢复能力。 OTP为我们准备好了构建容错程序所需要的工具。我们只需要定义正确的behavior 行为。 Supervisor 有了Supervisor,我们就只需要关心当进程崩溃时...

ljzn
2016/10/05
38
0
python 部署:virtuale + gunicorn + supervisor + flask

主要参考 Flask + Gunicorn + Nginx 部署 http://www.cnblogs.com/Ray-liang/p/4837850.html python web 部署:nginx + gunicorn + supervisor + flask 部署笔记 http://www.jianshu.com/p/b......

曹梦龙
2016/07/19
433
2
CentOS7下Supervisor安装与配置(Linux/Unix进程管理工具)

Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多...

yzy121403725
06/27
0
0
virtualenv 环境下 Flask + Nginx + Gunicorn+ Supervis

在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 OneAPM Python 探针来监测应用性能,形成一个「...

OneAPM蓝海讯通
2015/07/15
253
0
Supervisor全攻略(1)

Supervisor是一个C/S系统,它允许用户在类UNIX系统上控制一些进程。它具有以下特性: 1 简单 Supervisor通过INI格式配置文件进行配置,很容易掌握,它为每个进程提供了很多配置选项,可以使你...

China_OS
2015/09/18
277
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(6.1)hadoop生态圈介绍及就业前景

1. HADOOP背景介绍 1.1、什么是HADOOP 1.HADOOP是apache旗下的一套开源软件平台 2.HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3.HADOOP的核心组...

em_aaron
3分钟前
0
0
hadoop垃圾回收站

在生产生,hdfs回收站必须是开启的,一般设置为7天。 fs.trash.interval 为垃圾回收站保留时间,如果为0则禁用回收站功能。 fs.trash.checkpoint.interval 回收站检查点时间,一般设置为小于...

hnairdb
昨天
0
0
腾讯与Github的魔幻会面背后的故事…

10月22日,腾讯开源管理办公室有幸邀请到Github新晋CEO Nat Friedman,前来鹅厂参观交流。目前腾讯已经有近70个项目在Github上开源,共获得17w stars,世界排名11位。Github是腾讯开源的主阵...

腾讯开源
昨天
1
0
单例模式

单例模式(Singleton pattern)属于创建型设计模式。 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对...

NinjaFrog
昨天
1
0
TypeScript基础入门之装饰器(三)

转载 TypeScript基础入门之装饰器(三) 继续上篇文章[TypeScript基础入门之装饰器(二)] 访问器装饰器 Accessor Decorator在访问器声明之前声明。 访问器装饰器应用于访问器的属性描述符,可用...

durban
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部