简述

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。

也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

安装

配置文件

  • 目录结构

    supervisor
    ├── conf.d
    │   └── echo_time.conf -- 业务配置文件
    └── supervisord.conf -- 主配置文件,一般不需要改动
  • 使用 apt-get 安装后,supervisor 的主配置文件在 /etc/supervisor/supervisord.conf

  • 子进程配置文件在 /etc/supervisor/conf.d/*.conf

supervisord 和 supervisorctl的关系

supervisord 是主进程

  • 常用命令

    # 使用默认的配置文件 /etc/supervisord.conf
    supervisord
    # 明确指定配置文件
    supervisord -c /etc/supervisord.conf
    # 使用 user 用户启动 supervisord
    supervisord -u user
  • 服务命令

    • 查看服务状态:sudo systemctl status supervisor.service
    • 开启服务:sudo systemctl start supervisor.service
    • 停止服务:sudo systemctl stop supervisor.service
    • 重启服务:sudo systemctl restart supervisor.service
    • 开机启动项:sudo systemctl enable supervisor.service
  • supervisor.service 文件

    [Unit]
    Description=Supervisor process control system for UNIX
    Documentation=http://supervisord.org
    After=network.target [Service]
    ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
    ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
    ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload
    KillMode=process
    Restart=on-failure
    RestartSec=50s [Install]
    WantedBy=multi-user.target

supervisorctl 是客户端程序

用于向supervisord服务发起命令。

  • 所有命令,通过 supervisorctl -h 可以查看帮助说明

    sudo supervisorctl  help
    
    default commands (type help <topic>):
    =====================================
    add exit open reload restart start tail
    avail fg pid remove shutdown status update
    clear maintail quit reread signal stop version
  • 控制子进程命令

    # 停止某一个进程,program_name 为 [program:x] 里的 x
    supervisorctl stop program_name
    # 启动某个进程
    supervisorctl start program_name
    # 重启某个进程
    supervisorctl restart program_name
    # 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理)
    supervisorctl stop groupworker:
    # 结束 groupworker:name1 这个进程 (start,restart 同理)
    supervisorctl stop groupworker:name1
    # 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件
    supervisorctl stop all
    # 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
    supervisorctl reload
    # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
    supervisorctl update
  • 修改进程配置文件后,只要 sudo systemctl restart supervisor.service则会自动加载哦

示例

  • 以简单的 /home/www/python/echo_time.sh 为例

    #/bin/bash
    
    while true;
    do
    echo `date +%Y-%m-%d,%H:%m:%s`
    sleep 2
    done
  • /etc/supervisor/conf.d/新增子进程配置文件 echo_time.conf

    ; /etc/supervisor/conf.d/echo_time.conf
    
    [program:echo_time]
    
    command     = /usr/bin/env sh /home/www/python/echo_time.sh
    directory = /home/www/python
    user = www
    startsecs = 3 redirect_stderr = true
    stdout_logfile_maxbytes = 50MB
    stdout_logfile_backups = 10
    stdout_logfile = /home/www/python/log/echo_time.log
  • 然后启动程序:

    $ supervisorctl reread
    $ supervisorctl update

    这两个命令分别代表重新读取配置、更新子进程组

  • 这样刚才添加的 echo_time 脚本就常驻运行起来了。可以通过日志查看运行情况:

    tail -f log/echo_time.log
    2018-12-22,22:12:1545490695
    2018-12-22,22:12:1545490697
    2018-12-22,22:12:1545490699
    2018-12-22,22:12:1545490701
  • 也可以使用 sudo supervisorctl status 查看子进程运行情况:

    sudo supervisorctl status
    echo_time RUNNING pid 28906, uptime 0:08:36

web界面操作

  • 需要开启主配置文件 supervisord.conf 注释掉的这4行 (/etc/supervisor/supervisord.conf)

    [inet_http_server]         ; inet (TCP) server disabled by default
    port=*:9001 ; (ip_address:port specifier, *:port for ;all iface)
    ;username=www ; (default is no username (open server))
    ;password=www123456 ; (default is no password (open server))

    注意:如果修改配置文件时, [inet_http_server]这一行被注释,会导致不仅web需要认证,命令行使用 supervisorctl也需要认证,这时候就需要在交互式命令行里输入用户名、密码才能进行下一步的操作。

  • 浏览器访问:http://myip:9001 ,输入用户名、密码后,即可看到web页面:

遇到的错误

  • Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord

监控工具

参考

Linux进程管理工具Supervisor的更多相关文章

  1. Linux进程管理工具Supervisor的安装配置

    目录 Linux进程管理工具Supervisor的安装配置 简介 安装Python包管理工具 安装Supervisor 配置 配置文件参数说明 配置进程管理 启动supervisor 控制进程 交互终 ...

  2. Linux进程管理工具——supervisor

    介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...

  3. 进程管理工具supervisor

    1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...

  4. Linux进程管理工具

    Linux进程管理工具 Htop yum install htop 参考帮助: http://blog.csdn.net/skh2015java/article/details/53173896 Li ...

  5. linux 使用进程管理工具 supervisor

    1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...

  6. Python 进程管理工具 Supervisor 使用教程

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

  7. 进程管理工具Supervisor(一)简介与使用

    Supervisor是用Python开发的一套client/server架构的进程管理程序,能做到开机启动,以daemon进程的方式运行程序,并可以监控进程状态等等. linux进程管理方式有传统的r ...

  8. Linux 进程管理工具 supervisord 安装及使用

    Supervisor是用Python实现的一款非常实用的进程管理工具 1.安装过程非常简单 安装python 安装meld3-0.6.8.tar.gz 安装supervisor-3.0a12.tar. ...

  9. Linux进程管理工具 Supervisord 的安装 及 入门教程

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

随机推荐

  1. 使用免费 mongodb数据库 + 免费node.js服务器搭建小程序接口

    由于微信的小程序只支持不带端口的域名接口,不支持IP地址和接口,所以我们需要映射到80端口并绑定备案过的域名才能被微信小程序访问到.简单点就是接口需要 https 协议才行,找了许久的免费的数据库与n ...

  2. python之创建文件写入内容

    https://www.cnblogs.com/evablogs/p/7096686.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  3. About A Scam

    事件起因 本篇记录一个我遇到一个诈骗故事. 这两年我陆续有收到邮件,内容为有一大笔遗产我可以继承,让我提供银行卡号,身份证号相关信息. 后面邮件的内容就变为,有一笔公益款项,可以用我名义去管理,让我提 ...

  4. Tomcat调试404错误

    开篇附上我找到的部分解决方法摘自:https://blog.csdn.net/psp0001060/article/details/51879232 如不想跳转查看,链接内容如下: 问题一:      ...

  5. 通过getResourceAsStream 获得Properties文件属性和属性值

    1.Class.getResourceAsStream(String path) path:不以‘/’开头默认是从此类所在的包下取资源:以'/'开头则是从ClassPath根目录下获取 2.Class ...

  6. 菜鸟学IT之python词云初体验

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2822 1. 下载一长篇中文小说. 2. 从文件读取待分析文本. txt = ...

  7. keras03 Aotuencoder 非监督学习 第一个自编码程序

    # keras# Autoencoder 自编码非监督学习# keras的函数Model结构 (非序列化Sequential)# 训练模型# mnist数据集# 聚类 https://www.bili ...

  8. C#-之属性(1)

    1. 属性定义方式与字段类似,但还包括Set和Get两个访问器,其格式如下: public/private <type> Name { get { return variable:    ...

  9. feilong's blog | 目录

    每次把新博客的链接分享到技术群里,我常常会附带一句:蚂蚁搬家.事实上也确实如此,坚持1篇1篇的把自己做过.思考过.阅读过.使用过的技术和教育相关的知识.方法.随笔.索引记录下来,并持续去改进它们,希望 ...

  10. 小程序ios开发注意点

    两个月了啊,这两个月完成了一个vue的项目还有一个小程序,终于可以休息一下了, 今天先声明一个奇怪的bug,在我开发微信小程序的时候, 发现有个获取商品详情的接口在安卓手机上是可以获取数据的, 但是i ...