zoukankan      html  css  js  c++  java
  • supervisorctl 进程管理

    简介

    supervisor 是一个 Python 编写的进程管理工具,可以方便的 启动、重启、关闭 单个或多个进程(包括非 Python 进程)

    官网 http://supervisord.org

    为啥需要这东西呢,简单理解如下

    咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/reload功能的脚本,然后丢到/etc/init.d/下面。
    这么做有很多不好的地方,第一我们要编写这个脚本,这就很耗时耗力了。第二,当这个进程挂掉的时候,linux不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本。

    而,supervisor则可以完美的解决这些问题。好,怎么解决的呢,其实supervisor管理进程,就是通过fork/exec的方式把这些被管理的进程,当作supervisor的子进程来启动。这样的话,
    我们只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去就OK了。这样就省下了我们如同linux管理进程的时候,自己写控制脚本的麻烦了。
    第二,被管理进程作为supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,所以当然也就可以对挂掉的子进程进行自动重启了,
    当然重启还是不重启,也要看你的配置文件里面有木有设置autostart=true了,这是后话。

    安装

    supervisor 可以运行在 linux、mac等系统上,因为是 Python 开发的,故可直接 pip 安装

    pip install supervisor

    安装完成后,在 python/bin 目录下可找到

    配置

    supervisor 配置包含 supervisor 自身的配置 和 program 的配置;

    supervisor 是一个 C/S 模型的程序,supervisord 是服务端,提供各种进程管理逻辑,supervisorctl 是客户端,提供各种操作方法,

    program 是应用程序,即我们的服务

    supervisor 服务端配置

    1. 首先看看 supervisord 的配置,也可把默认配置重定向到指定文件

    echo_supervisord_conf    # 查看配置
    echo_supervisord_conf > /etc/supervisord.conf    # 重定向配置文件

    去掉乱七八糟的,配置大概如下

    2. 启动 supervisord

    supervisord -c /etc/supervisord.conf

    通过 -c 指定配置文件;

    如果不指定会按照这个顺序查找配置文件:$CWD/supervisord.conf, $CWD/etc/supervisord.conf, /etc/supervisord.conf

    program 配置

    配置方式

    supervisrod 运行起来后,需要添加 program 的配置文件。

    可以把 program 的配置项也写到 supervisord.conf 文件里,但并不推荐这样做,而是通过 include 的方式把不同的程序(组)写到不同的配置文件里。

    举例,新建一个目录 /etc/supervisor/ 用于存放 program 配置文件,然后把 /etc/supervisord.conf 里 include 部分的的配置修改一下:

    配置内容

    假设我们的服务如下:

    用 Python 和 Flask 框架编写的用户中心系统,取名 usercenter,用 gunicorn (http://gunicorn.org/) 做 web 服务器。

    项目代码位于 /home/leon/projects/usercenter,gunicorn 配置文件为 gunicorn.py,WSGI callable 是 wsgi.py 里的 app 属性。直接在命令行启动的方式是这样的:

    对应的配置文件如下

     配置文件至少需要一个 [program:x] 部分的配置,来告诉 supervisord 需要管理那个进程。

    [program:x] 语法中的 x 表示 program name,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行 start、restart、stop 等操作

    使用 supervisorctl 启动服务

    两种方式

    1. 启动 supervisorctl,进入 其 shell 操作界面;

    该方式需要 指定 和 supervisord 相同的配置文件

     上面这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了:

    2.直接在命令行执行命令

    其它

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

    除了单个进程的控制,还可以配置 group,进行分组管理。

    经常查看日志文件,包括 supervisord 的日志和各个 pragram 的日志文件,程序 crash 或抛出异常的信息一半会输出到 stderr,可以查看相应的日志文件来查找问题。

    Supervisor 有很丰富的功能,还有其他很多项配置,可以在官方文档获取更多信息:http://supervisord.org/index.html

    https://www.cnblogs.com/gaidy/p/12808662.html 

    常用命令

    supervisor客户端命令

    查看所有子进程的状态

    [root@pld3wlcap07 bin]# ./supervisorctl status
    roadplan                         RUNNING   pid 87098, uptime 20 days, 22:53:08

    第一列是服务名;

    第二列是运行状态,RUNNING表示运行中,FATAL 表示运行失败,STARTING表示正在启动, STOPED表示任务已停止; 

    第三/四列是进程号;

    最后是任务已经运行的时间

    supervisorctl status processname    # 查看指定进程的状态
    
    supervisorctl start all             # 启动所有进程
    supervisorctl start processname     # 启动指定进程
    supervisorctl stop all              # 关闭所有进程
    supervisorctl stop processname      # 关闭指定进程
    supervisorctl restart processname   # 重启指定进程
    
    supervisorctl shutdown              # 关闭supervisord
    supervisorctl clear 进程名           # 清空进程日志
    supervisorctl                       # 进入到交互模式下。使用help查看所有命令
    
    # 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程:
    supervisorctl reload
    # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启:
    supervisorctl update
    
    

    supervisor 服务端命令

    sudo unlink /var/run/supervisor.sock
    supervisord -c /etc/supervisor/supervisord.conf

    更多信息可查看参考资料

    参考资料:

    http://www.ttlsa.com/linux/using-supervisor-control-program/  使用 supervisor 管理进程              【有理论】

    https://blog.csdn.net/yfanjy/article/details/105975723  supervisor、supervisord、supervisorctl基础使用详解    【有理论】

    https://www.jianshu.com/p/c8071234f081  supervisor 常用命令的使用

    https://www.jianshu.com/p/32de18156617  简书

  • 相关阅读:
    Loj #6560 小奇取石子
    某谷 P5153 简单的函数
    某谷 P5159 WD与矩阵
    前端ajax访问 django 报错 POST http://127.0.0.1:8001/xxx 403 (Forbidden)
    python
    Java
    Java
    Java
    Java
    java web 向数据库插入中文数据乱码问题
  • 原文地址:https://www.cnblogs.com/yanshw/p/15166141.html
Copyright © 2011-2022 走看看