原文地址:https://word.gw1770df.cc/2016-08-04/linux/supervisor-%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/

Supervisor

官网为 http://supervisord.org/

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
关闭所有副本

001-supervisor的更多相关文章

  1. 基于supervisor秒级Laravel定时任务

    背景介绍 公司需要实现X分钟内每隔Y秒轮训某个接口,Linux自带的crontab貌似只精确到分钟,虽然可以到精确到秒,但是并不满足需求. 选型 公司项目都是 基于 Laravel 框架,所以这个没得 ...

  2. 基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒)

    本篇文章给大家带来的内容是关于基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 公司需要实现X分钟内每隔Y秒 ...

  3. asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel)

    概述 本文目的是搭建三台asp.net core 集群, 并配上 nginx做负载均衡   首先准备要运行的源码 http://pan.baidu.com/s/1c20x0bA 准备三台服务器(或则虚 ...

  4. 进程监控工具supervisor 启动Mongodb

    进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...

  5. Linux Supervisor 守护进程基本配置

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

  6. supervisor的安装与简单介绍

    1,介绍 Supervisor是一个进程管理工具,官方的说法 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要 ...

  7. supervisor监管进程max file descriptor配置不生效的问题

    配置了 sudo vim /etc/security/limits.conf * soft nofile * hard nofile   单独起进程没问题, 放到supervisor下监管启动,则报错 ...

  8. centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)

    首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...

  9. python supervisor使用

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...

  10. 进程管理supervisor的简单说明

    背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup.&.screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想 ...

随机推荐

  1. libusb开发者指南

      本文档描述libusb的API,以及如何开发USB应用.1 介绍 1.1 概览本文档描述libusb-0.1的API和USB相关内容.1.2 当前OS支持Linux 2.2或以上FreeBSD/N ...

  2. 网络协议之TCP/IP协议

    沙漏计时器型TCP/IP协议族,允许IP on everyting,即支持多种形式和物理层和数据链路层实现:同时支持多种多样的应用层协议,扩展了各式各样的服务. IP协议(网际协议) 与IP协议配套使 ...

  3. WPF C# 创建缩略图

    不太精确的方法: public bool ThumbnailCallback() { return false; } private void CreateThumb(int toWidth) { S ...

  4. What is the difference between a URI, a URL and a URN?

    资料: URI: URL: URN:

  5. 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_2 回顾自定义mybatis的流程分析

  6. Python学习之==>发送邮件

    自动化测试执行完成后,需要自动发送测试报告.Python发送邮件可以使用smtplib标准模块,但该模块比较繁琐,推荐使用yagmail这个第三方模块,用法比较简单. 一.邮箱设置 1.在邮箱设置里打 ...

  7. SELECT-OPTIONS对象

    1. SELECT-OPTIONS基本语法及定义 SELECT-OPTIONS通常用于参照一数据库字为建立数据输入域,其定义对象命名长度不能超过8位,其产生的屏幕对象最大输入长度为18位,语法如下: ...

  8. CentOS6.5 编译安装PHP5.6(apache模块)

    一.环境准备 1. 下载php源码包 # wget http://cn2.php.net/distributions/php-5.6.30.tar.gz # tar -xf php-5.6.30.ta ...

  9. 【MM系列】SAP MM模块-MIGO收货后自动打印收货单

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-MIGO收货后自动 ...

  10. Go语言入门篇-基本类型排序和 slice 排序

    参见博客:https://blog.csdn.net/u010983881/article/details/52460998 package main import ( "sort" ...