简述

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. SQL ----post漏洞测试注入

    使用工具sqlmap 输入账号密码进行bp截断,获取文本保存在sqlmap下面2.txt 爆数据库 爆表爆表 爆数据 最后把数据密码md5解析

  2. GlusterFS群集存储项目

    最小化安装的centos7.5 内存大于1GB 关闭selinux,防火墙端口放行(port:24007,111)(测试建议关闭firewalld) 一.环境部署 所有软件包离线安装,原因是yum安装 ...

  3. oracle 当前年到指定年的年度范围求取

    如下面公式所示,求取2015到当前年(2018)的年度范围,当前年是由系统获取的,用到了sysdate和函数to_char,to_date. 当然,当前年也可以换成指定年份 SELECT TO_CHA ...

  4. 如何学好java

    今天发现这么一篇文章,对于笔者谈的:"一方面很努力学习,一方面又觉得不踏实",我感同身受.觉得文章写得不错,在此献给一些在java中努力的朋友们,希望能有所收获. 文章原内容: 近 ...

  5. June 28th. 2018, Week 26th. Thursday

    You cannot change the circumstances but you can change yourself. 既然改变不了环境,那就改变自己. From Jim Rohn. Rec ...

  6. Android 获取验证码倒计时实现

    Android 获取验证码倒计时实现 2017年10月24日 09:55:41 FBY展菲 阅读数:2002    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  7. WIFI KILL神器

    https://anky.cc/esp8266-deauther-wifi-jammer/ https://github.com/spacehuhn http://tieba.baidu.com/p/ ...

  8. Activiti开发案例之代码生成工作流图片

    图例 环境 软件 版本 SpringBoot 1.5.10 activiti-spring-boot-starter-basic 6.0 生成代码 以下是简化代码: /** * 查看实例流程图,根据流 ...

  9. Element ui 日期限制范围

    时间限定范围: <el-date-picker type="date" placeholder="选择日期" v-model="addForm. ...

  10. python总结 + 部署简单项目 到生产

    -> filter过滤:list(filter(lambda x: x[0].find('tmp') == -1, table_temp_r)) -> 自定义map:def map_for ...