• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

十分钟玩转Supervisor

武飞扬头像
星仓
帮助1

进程挂了怎么办?用用它就知道啦

一、前言

  Supervisor是一款基于python的进程管理工具,可供用户自由管理类unix操作系统上的进程。它提供了许多简单可用的配置项,比如:自动重启挂掉的进程、自动log rotation等。它包含supervisord、supervisorctl和web server等组件,这就让我们能轻松管理、监控自己的服务。

二、安装

  一切工具的引入的都免不了需要介绍它的安装步骤,supervisor自然也是这样。由于我们服务器不能连接外网,这里推荐使用下载tar包安装。

  1. 下载supervisor以及依赖的组件(安装包见附件)
  2. 安装、创建配置文件(脚本详见附件)
    ## 安装
    cd supervisor-{version}
    sudo python setup.py install
    
    ## 创建配置文件
    echo_supervisord_conf > /etc/supervisord.conf
    
  3. 启动试运行
    ## 启动
    supervisord -c /etc/supervisord.conf
    

三、使用

  在正式运用Supervisor管理我们的业务进程之前,先了解一下它的后台守护进程(supervisord)的基础配置项、终端(supervisorctl)的使用命令。

  1. supervisord配置文件
;Server配置区
[unix_http_server]          ; 采用unix socket的server配置
file=/tmp/supervisor.sock   ; socket文件路径
;username=user              ; 用户名(默认不设置)
;password=123               ; 密码(默认不设置)

;[inet_http_server]         ; 采用inet socket的server配置
;port=127.0.0.1:9001        ; 监听网卡及端口(*:port 所有网卡)
;username=user              ; 用户名(默认不设置)
;password=123               ; 密码(默认不设置)

;守护进程配置项区
[supervisord]
logfile=/tmp/supervisord.log   ; supervisord日志文件
logfile_maxbytes=50MB          ; supervisord日志文件大小
logfile_backups=10             ; supervisord日志文件rotation个数
loglevel=info                  ; supervisord日志层级(默认: info; 其他: debug,warn,trace) 
pidfile=/tmp/supervisord.pid   ; supervisord的pid文件

;客户端配置项区
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;unix socket地址
;serverurl=http://127.0.0.1:9001      ;inet socket地址
;username=chris                ; 用户名
;password=123                  ; 密码

;业务进程配置区
;[program:theprogramname]      ; 进程标志
;command=/bin/cat              ; 进程执行命令
;process_name=%(program_name)s ; 进程名称表达式 (默认 %(program_name)s)
;numprocs=1                    ; 启动的进程数量 (默认 1)
;directory=/tmp                ; 进程执行命令所在目录
;umask=022                     ; 进程执行权限
;priority=999                  ; 进程执行优先级 (默认 999)
;autostart=true                ; 是否在supervisord启动时自启 (默认: true)
;startsecs=1                   ; 进程启动后监控的秒数 (默认: 1s)
;startretries=3                ; 进程启动失败后的重启次数
;autorestart=true              ; 进程挂掉后是否重启
;user=chrism                   ; 进程执行用户
;redirect_stderr=true          ; 是否将标准错误重定向至标准输出
;stdout_logfile=/a/path        ; 标准输出日志文件路径
;stdout_logfile_maxbytes=1MB   ; 标准输出日志文件大小 (默认 50MB)
;stdout_logfile_backups=10     ; 标准输出日志文件保存数量 (默认 10)
;stderr_logfile=/a/path        ; 标准错误日志文件路径
;stderr_logfile_maxbytes=1MB   ; 标准错误日志文件大小 (默认 50MB)
;stderr_logfile_backups=10     ; 标准错误日志文件保存数量 (默认 10)

;业务进程组配置区
;[group:thegroupname]
;programs=progname1,progname2  ; 进程组包含的进程
;priority=999                  ; 进程组启动的优先级 (默认 999)


;外部包含配置区
[include]                      ; 业务进程或进程组单独配置时,可应用
files = /data/webdocs/script/supervisor/*.conf

进程管理配置参数,不建议全都写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中。

  1. supervisord执行命令
supervisord -c supervisord.conf  # 根据配置文件supervisord.conf启动supervisor服务
  1. supervisorctl使用命令
supervisorctl status             # 进程运行状态
supervisorctl start <name>       # 启动某进程
supervisorctl start <gname>:*    # 启动某进程组
supervisorctl start all          # 启动所有进程
supervisorctl stop <name>        # 停止某进程
supervisorctl stop <gname>:*     # 停止某进程组
supervisorctl stop all           # 停止所有进程
supervisorctl restart <name>     # 重启某进程
supervisorctl restart <gname>:*  # 重启某进程组
supervisorctl restart all        # 重启所有进程
supervisorctl reload             # 重启supervisord,会重启所有进程
supervisorctl reread             # 显示配置文件发生更改的进程,但是不重启进程
supervisorctl update             # 重启配置文件发生更改的进程,会添加或移除进程
supervisorctl clear all          # 清空所有进程的日志文件

supervisorctl是supervisord的一个命令行客户端工具,启动时需要指定与 supervisord使用同一份配置文件,否则与supervisord一样按照顺序查找配置文件,或者可以在启动supervisord时使用inet socket启动server,这样supervisorctl可以通过socket进行访问。

  1. web server

学新通 除了使用supervisorctl之外,还可以配置supervisrod启动web管理界面,这个web后台使用 Basic Auth的方式进行身份认证。

四、原理

Supervisord生成主进程并将主进程变成守护进程,supervisord依次生成配置文件中的工作进程,然后依次监控工作进程的工作状态,这些工作进程托管于supervisord主进程,因为它们的父进程便是supervisord主进程。并且主进程负责与supervisorctl客户端通信,负责子进程的信号监听,实现主进程对子进程的控制。

graph TD
    Supervisord主进程-->管道
    Supervisord主进程-->Supervisorctl进程
    管道-->业务进程work1
    管道-->业务进程work2

学新通 如图所示,supervisord的父进程pid为1(系统内核进程),而业务进程的父进程pid是13108,即supervisord进程,说明业务进程被supervisord托管。

五、结语

  Supervisor是一款简单方便配置的进程管理工具,它提供了可视化界面和终端来呈现与管理用户进程。本文简单介绍Supervisor的使用方法,它有很丰富的功能,还有其他很多项配置,可以在官方文档获取更多信息:supervisord.org/index.html

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbache
系列文章
更多 icon
同类精品
更多 icon
继续加载