详解supervisor使用教程

A Process Control System 使用b/s架构、运行在类Unix系统上一个进程监控管理系统它可以使进程以daemon方式运行,并且一直监控进程,在意外退出时能自动重启进程。

安装

Supervisor是使用python开发的一个进程管工具,安装和使用都非常简单。使用 pip 或者 easy_install 安装会非常方便,自动解决依赖关系。
– sudo pip install supervisor
– sudo easy_install supervisor

pip的安装请参考 python自动安装pip

初识

安装完成后系统会增加几个命令

supervisord 用于启动supervisor服务。

supervisorctl 用于管理supervisor服务,管理使用supervisor启动的进程。

安装好supervisor后需要手动的生成配置文件。

echo_supervisord_conf | sudo tee /etc/supervisord.conf
supervisor默认读取的配置文件为/etc/supervisord.conf,建议将配置文件放在此位置。

我们先简单的查看一下 supervisord.conf,配置文件格式和ini格式配置文件相同,由节、键、值组成,配置文件注释为。

[unix_http_server]

此节是配置连接supervisord的sock的文件,包括sock文件路径,用户认证。使用supervisorctl命令进行管理进程时,使用的就是此sock文件。默认保持开启,如将此项关闭 [inet_http_server] 则无法使用。 [inet_http_server]
此节配置supervisor的web管理界面,配置监听的地址和端口,已经用户认证。默认为关闭状态。如需开启则将此节注释去掉,然后修改相应的键值。 [supervisord]

此节为配置supervisor服务参数,例如日志,日志大小等一些参数。 [supervisorctl]

用于配置supervisorctl管理程序参数,例如sock文件路径,需要和[unix_http_server]相同。

[include]此节作用为包含其他配置文件,本文建议开启此项,包含额外的配置文件,将需要管理的进程配置写入到额外的配置文件,不需要经常编辑主配置文件,保证安全性。修改代码为

[include]
files = /etc/supervisor.d/*.conf

读取/etc/supervisor.d/文件夹下所有后缀为conf的文件。

第一步配置第一个使用supervisord管理的程序

我们使用 python2.7 来作为演示,使用SimpleHTTPServer模块方便快速的启动一个http server。

1,创建配置文件 /etc/supervisor.d/test1.conf,写入一下内容

[program:simplehttpserver]
command=/usr/bin/env python2.7 -m SimpleHTTPServer 20080

这是一个最简单的例子,第一行指定当前配置的程序名称。第二行程序运行命令(20080 为 http server端口号)。

2,第一个程序已经配置好,接下来就可以启动supervisord来查看一下效果。

输入命令 sudo supervisord 即可启动服务。

很多机器会打印出几行信息,这并不代表程序出错,意思是

“supervisord 是使用root身份来启动的,读取默认位置的配置文件,如果需要读取其他位置配置文件请使用 -c 参数”

3,现在使用ps -ef | grep python来检查一下刚才配置的程序是否已经启动。到此为止我们的第一步已经完成。

详细配置

[program:theprogramname]
command=/bin/cat    ; 程序运行命令,建议使用绝对路径。
process_name=%(program_name)s ; 程序名称,可用的变量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目录)。 一般程序需要运行多个副本的情况会使用。后面会有例子。
numprocs=1     ; 程序运行的副本个数,默认为1,如果值大于1,则`process_name` 必须包含 `%(process_num)s`
numprocs_start=0    ; `%(process_num)s`起始数字,默认为0
00=/tmp    ; 程序运行的所在目录,相当于先cd到指定目录,然后运行程序。
umask=022      ; umask for process (default None)
priority=999     ; 程序操作的的优先级,例如在start all/stop all,高优先级的程序会先关闭和重启。
autostart=true    ; 在supervisord启动时自动启动,默认为true
startsecs=1     ; 程序启动前等待时间等待时间。默认为1。
startretries=3    ; 尝试重启最大次数。默认为3。
autorestart=unexpected  ; 是否自动重启,可选参数为 false, unexpected, true。如果为false则不自动重启,如果为unexpected表示如果程序退出信号不在 `exitcodes` 中,则自动重启。默认为unexpected
exitcodes=0,2     ; 程序退出码。配合`autorestart`使用。默认为 0,2
stopsignal=QUIT    ; 杀死进程是发送的信号,默认为TREM。
stopwaitsecs=10    ; 发送SIGKILL信号前最大等待时间。默认为10。
user       ; 以指定用户身份启动程序。默认为当前用户。
stopasgroup=false    ; 是否向子进程发送停止信号,这对于Flask的debug模式很有用处,如果设置为true,则不向子进程发送停止信号。默认为false
killasgroup=false    ; 是否向子进程发送kill信号,默认为false
redirect_stderr=false   ; 将错误输出定向到标准输出,默认为false
stdout_logfile=/a/path  ; 标准输出日志路径,可选参数为 `自定义` `AUTO` `NONE`,`自定义`将日志写到自定义路径,可用的变量有`group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目录);`NONE`不创建日志;`AUTO` 又supervisord自动选择路径,并且当supervisord服务重新启动时原来自动创建的日志以及日志的备份文件会被删除。默认为AUTO
stdout_logfile_maxbytes=1MB ; 标准输出日志单个文件最大大小,如果超过指定大小会将日志文件备份,可用的单位 KB MB GB。如果设置为0则表示不限制文件大小。默认为50MB
stdout_logfile_backups=10  ; 标准输出日志文件最大备份数。默认为10
stdout_capture_maxbytes=1MB ; 当进程处于“stdout capture mode”模式下写入到FIFO队列最大字节数,可用单位 KB MB GB。默认为0,详细说明见[capture-mode](http://supervisord.org/logging.html#capture-mode)
stdout_events_enabled=false ;
        ;以下配置项配置错误输出的日志参数。和上面标准输出配置相同。
stderr_logfile=/a/path  ;
stderr_logfile_maxbytes=1MB ;
stderr_logfile_backups=10  ;
stderr_capture_maxbytes=1MB ;
stderr_events_enabled=false ;
environment=A="1",B="2"  ; 环境变量设置,可用的变量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`。 默认为空。
serverurl=AUTO    ; override serverurl computation (childutils)

必要参数只有 command,其他未可选参数。 [program:x] 自定义的程序名不能重复 配置示例管理tornado应用

需要启动4个进程,分别监听四个连续端口(20081 – 20084)。

将错误输出定向到标准输出,每个端口标准输出写入到不同文件中,单个文件最大50MB,最多保存3个备份。

启动前等待3秒。

supervisord启动时自动启动。程序运行出错自动重启,最大尝试重启次数3次。

[program:tornado-test]
command=/usr/bin/env python2.7 /home/user/tornado-test.py --port=%(process_num)s
process_name=%(program_name)s_port=%(process_num)s
numprocs=4
numprocs_start=20081
redirect_stderr=true
stdout_logfile=/tmp/tornado-test-%(process_num)s.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
autorestart=true
startsecs=3
startretries=3

管理nginx

nginx默认运行状态是后台运行程序。supervisord不能管理此类程序需要,需要修改nginx主配置文件。

在nginx最外层加入daemon off;

最简单的配置。

[program:nginx]
command=/usr/sbin/nginx ;建议使用绝对路径。

supervisorctl

supervisor进程管理工具,可以方便启动停止进程,查看程序日志,重新载入配置文件。

如果supervisord配置文件不再默认位置,使用supervisorctl工具时需要指定配置文件路径 supervisordctl -c 配置文件路径

常用命令

supervisordctl status 查看进程运行状态 supervisordctl start 进程名 启动进程 supervisordctl stop 进程名 关闭进程 supervisordctl restart 进程名 重启进程 supervisordctl update 重新载入配置文件 supervisordctl shutdown 关闭supervisord supervisordctl clear 进程名 清空进程日志 supervisordctl 进入到交互模式下。使用help查看所有命令。

start stop restart + all 表示启动,关闭,重启所有进程。

如果一个进程启动了多个副本,例如上文tornado-test。

关闭所有副本

(0)

相关推荐

  • 使用Python的Supervisor进行进程监控以及自动启动

    做服务器端开发的同学应该都对进程监控不会陌生,最近恰好要更换 uwsgi 为 gunicorn,而gunicorn又恰好有这么一章讲进程监控,所以多研究了下. 结合之前在腾讯工作的经验,也会讲讲腾讯的服务器监控是怎么做的.同时也会讲下小团队又该怎么敏捷的解决. 下面按照监控的方法依次介绍. 一.按照进程名监控 在腾讯内部所有server都是要打包发布的,而在打包过程中是需要填写要监控的进程名,然后在crontab中定时通过ps查询进程是否存在. 这种方法是比较简单的方法,但是考虑到很多进程会在启

  • python进程管理工具supervisor的安装与使用教程

    前言 在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便.如果有一个工具能够实现每台机器上多个进程的简单高效中心化管理将是非常方便的.于是Supervisord工具应运而生.与Supervisord类似的工具包括monit, daemontools和runit.下面话不多说了,来一起看看详细的介绍吧. 安装 Supervisord是运行在Python环境下的服务监控程序,所以在安装supervisord之前必须

  • nodejs 图解express+supervisor+ejs的用法(推荐)

    通过node js自带的http模块搭建了一个简易的服务器,实际在开发中,一般用的是express框架,本文我们就来讲讲项目开发中必备不可少的几样东西: •服务器( express ) •路由( express.Router ) •模板引擎( ejs ) •当然再加上数据库,就可以完成一个mvc的web应用了,数据库的用法,后期我会写一个项目 一.首先,新建一个项目文件夹( ghostwu ),在命令行下切换到该目录,用npm init --yes 初始化package.json文件 安装exp

  • Mac下Supervisor进程监控管理工具的安装与配置

    Supervisor是一个类 unix 操作系统下的进程监控管理工具. 安装 Supervisor Supervisor是由 Python 写成,可用 Python 的包安装管理工具 pip(Python Package Index) 直接安装: 复制代码 代码如下: sudo pip install supervisor 配置 Supervisor Supervisor 的配置文件命名为 supervisord.conf,它为 supervisord(Supervisor 的主服务命令) 和

  • PHP程序员玩转Linux系列 使用supervisor实现守护进程

    PHP程序员玩转Linux系列文章: 1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 7.PHP程序员玩转Linux系列-nginx初学者引导 8.PHP程序员玩转Linux系列-N

  • PHP框架Laravel中实现supervisor执行异步进程的方法

    问题描述 大家在使用Laravel框架实现动态网页时,若有些操作计算量较大,为了不影响用户体验,往往需要使用异步方式去处理.这里使用supervisor和laravel自带的queues实现.下面来看看详细的介绍: Supervisor Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的控制,还可以同时启动.关闭多个进程,比如很不幸的服务器出问题导

  • 基于Python 的进程管理工具supervisor使用指南

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2.4 以上版本,但是还无法运行在 Python 3 上,不过已经有一个 Python 3 的移植版 supervisor-py3k. 什么情况下我们需要进程管理呢?就是执行一些需要以守护进程方式执行的程序,比如一个后台任务,我最常用的是用来启动和管理基于 Tornado 写的 Web 程序. 除此之

  • Python使用Supervisor来管理进程的方法

    本文实例讲述了Python使用Supervisor来管理进程的方法.分享给大家供大家参考.具体分析如下: Supervisor可以启动.停止.重启*nix系统中的程序.也可以重启崩溃的程序. supervisord的一个守护进程,用于将指定的进程当做子进程来运行. supervisorctl是一个客户端程序,可以查看日志并通过统一的会话来控制进程. 看例子: 我们写了一个py脚本,用于往log文件中记录一条当前的时间. root@ubuntu:/home/zoer# cat daemon.py

  • 利用Supervisor管理Redis进程的方法教程

    前言 Supervisor 是一个用 Python 实现的进程管理工具,可以很方便地启动,关闭,重启,查看,以及监控进程,当进程由于某种原因崩溃或者被误杀后,可以自动重启并发送事件通知.Supervisor 可谓运维利器,使用 Supervisor 来管理进程,可以提高系统的高可用特性. 随着 Redis 越来越流行,越来越多的公司都使用上了 redis,因此 Redis 的进程管理就成了很多公司都需要面临的问题,本文介绍如何使用 Supervisor 来管理 Redis 进程. Supervi

  • node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用

    在开发或调试Node.js应用程序的时候,当你修改js文件后,总是要按下CTRL+C终止程序,然后再重新启动,即使是修改一点小小的参数,也总是要不断地重复这几个很烦人的操作.有没有办法做到当文件修改之后,Node.js自动重新启动(或重新加载文件)以节省时间呢?一开始我是想到用grunt的watch模块来监控文件变化,但后来在网上一查,原来我们想到的,别人早已想到,并且已经做得很好.Node Supervisor正是这样一个可以实现这种需求的Node.js模块. 根据Github上的说明,Nod

  • centos7使用supervisor的详细教程

    supervisor是用Python开发的一套通用的进程管理程序,可以将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时可以自动重启 安装supervisor # yum search setuptools .... python-setuptools.noarch : Easily build and distribute Python packages #yum install -y python-setuptools.noarch #easy_install super

  • python进程管理工具supervisor使用实例

    平时我们写个脚本,要放到后台执行去,我们怎么做呢? 复制代码 代码如下: nohup python example.py 2>&1 /dev/null & 用tumx或者screen? 但是用着可能都不爽,今天就看看python里面的一个进程管理工具supervisor: 官方说:Supervisor: A Process Control System 说白了他就是一个demon程序,他来帮助我们完成对我们想要托管的脚本也好程序也好,好好的照料: 1.安装 python的东西就是好安

随机推荐