简述

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. 简说Python生态系统的14年演变

    [导语]Python 里各种丰富的标准库.第三方库和模块成为其广受欢迎的原因之一.而 PyPI 就是大家想第三方库前先要安装的一个仓库.作为使用者,它可以帮我们查找 Python 社区开发和共享的软件 ...

  2. Python之Scripy框架

    为什么要用到cmd界面 --- 在这里操作的是Scripy框架的指令,不是Python代码 Parse --- Scripy的回调函数 fiddler --- 用于爬取JS存储数据的页面 项目: 1. ...

  3. July 12th, 2018. Thursday, Week 28th.

    People love what other people are passionate about. 人总是会爱上别人倾注热情的事物. From La La Land. This quote has ...

  4. iis问题

    1.8.5版本的iis配置完成,不能打开网页显示503.原因是应用程序池,加载用户配置文件失败,然后应用程序池关闭了.关闭它就可以正常打开了. server2008,打不开网页,打开url显示目录的原 ...

  5. 搭建ES6开发环境

    https://github.com/IOJINDD/ES6-dev 在gulpfile最后一行加上: gulp.task('default', ['compile-es6', 'pack-js', ...

  6. 【转】C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)

    using System.Timers;定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = ...

  7. Mac下开发ASP.NET Core应用,我用FineUICore!

    在 Mac 下开发 ASP.NET Core 2.0+ 应用,我用FineUICore! FineUICore:企业级 ASP.NET 控件库,10年持续更新,只为你来:http://fineui.c ...

  8. TypeError: argument 1 must be an integer, not _subprocess_handle/OSError: [WinError 87]

    Error Msg: Traceback (most recent call last): File "c:\python27\lib\site-packages\celery\worker ...

  9. jeecg入门操作—模板配置(录入界面)

    点击online表单的模板配置,进入模板设计列表页面,点击创建模板 点击创建模板 点击激活 设计完成,点击激活(表单模板可以多个,激活状态只能有一个) 激活后,重新加入功能测试,点击添加页面,效果如下 ...

  10. C# 查看EF生成的SQL语句

    用sqlsever追踪最后的sql语句. 返回IQueryable<T>类型, 里面封装的就是生成的SQL脚本,设置断点queryable = DataContext.Set<T&g ...