IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用Supervisor简化进程管理工作

    Stupid ET发表于 2014-11-02 10:26:00
    love 0

    这篇东西想写很久了,拖延症晚期患者-.-,今天终于下决心把它写了吧。

    很久很久之前,在思考如何部署基于Tornado的服务,就和郑纪一起找到了一个Tornado的好伙伴——Supervisor。

    Supervisor,简单来说,就是一个Python写的进程管理器。不仅仅可以用来管理进程,还可以用来做开机启动。

    我在服务器上面有几个服务:

    1. 基于Tornado的短链接服务163.gs和很久木有更新的通讯录5txl.com。
    2. node.js的Ghost Blog。
    3. 还有 番羽土啬 用的shadowsocks。

    需求是,对于这些服务能够做到如下:

    1. 重启机器后,能够自启动。
    2. 平时有个方便的进程查看方式。
    3. 能够有个方便的方式重启进程。

    虽然我们自己写启动脚本,但是其实还是挺烦的,特别是,我要开多个同样的服务,就要写几份几乎一样的启动脚本,这个十分之冗余。

    庆幸的是,Supervisor1可以解决这些问题,安装好Supervisor,仅需要为Supervisor弄份启动脚本,便可以一劳永逸。

    安装

    非常熟悉的安装方式:sudo pip install supervisor,便可以拥有Supervisor,如果没有启动脚本,可以从这里下载一份,放置到/etc/init.d/下面便可。

    配置

    我们可以看到启动脚本中,其实默认写了一个启动参数-c /etc/supervisord.conf,这里我们可以通过Supervisor附送的贴心的小脚本生成默认的配置文件echo_supervisord_conf > /etc/supervisord.conf。

    我们可以根据需要修改里面的配置。我这里,每个不同的项目,使用了一个单独的配置的文件,放置在/etc/supervisor/下面,于是修改/etc/supervisord.conf,加上如下内容:

    1
    2
    
    [include]
    files = /etc/supervisor/*.conf

    修改完后,我们便可以将项目的配置文件命名为.conf放置在/etc/supervisor/下面即可。

    这里有个163.gs站点的配置文件163.gs.conf,使用了virtualenv,启动了两个Tornado进程。

    163.gs.conflink
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    [program:163gs]
    numprocs = 2
    numprocs_start = 8850
    user = projects
    process_name = 163gs-%(process_num)s
    directory = /home/projects/163.gs/
    command = /home/projects/163.gs/env/bin/python /home/projects/163.gs/main.py --port=%(process_num)s
    autorestart = true
    redirect_stderr = true
    stdout_logfile = /var/log/supervisor/163gs.log
    stderr_logfile = /var/log/supervisor/163gs-error.log
    

    更多详细的配置可以围观supervisor官方文档

    使用

    放置完配置文件后,我们使用service supervisor restart启动一下服务(如果是刚刚安装完,那么还没有supervisor进程,如果已经启动了,那么跳过这步)。

    当我们需要管理进程的时候,使用supervisor的控制程序连接服务便可以很方便的查看经常状态和管理进程了:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    @  ~  # supervisorctl
    163gs:163gs-8850                 RUNNING   pid 2929, uptime 15 days, 23:35:21
    163gs:163gs-8851                 RUNNING   pid 2930, uptime 15 days, 23:35:21
    163gs_redis                      RUNNING   pid 2924, uptime 15 days, 23:35:21
    5txl:5txl-8070                   RUNNING   pid 2927, uptime 15 days, 23:35:21
    5txl:5txl-8071                   RUNNING   pid 2928, uptime 15 days, 23:35:21
    ghost                            RUNNING   pid 2923, uptime 15 days, 23:35:21
    shadowsocks_me                   RUNNING   pid 2925, uptime 15 days, 23:35:21
    
    supervisor> help
    
    default commands (type help ):
    =====================================
    add    clear  fg        open  quit    remove  restart   start   stop  update
    avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version
    
    supervisor> help reread
    reread                  Reload the daemon's configuration files
    

    对于使用,直接输入help,就可以看到常用的命令,至于命令是啥意思,可以直接help那个命令,就可以看到解释了。

    升级Supervisor

    升级Supervisor也是非常简单的,使用pip install --upgrade supervisor既可以更新程序,然后使用service supervisor restart重启一下,就可以升级完成。

    我在Github有我的服务器配置supervisor_conf,有兴趣可以看看。

    好,打完收工。


    1. http://supervisord.org/↩


    PermaLink: http://everet.org/supervisor.html
    Tags: Python, Supervisor


沪ICP备19023445号-2号
友情链接