###

alias hbin me

初识 Circus (1)

Circus 是一个用来监控和管理 Process 与 Socket 的 Python 应用。

预备环境

  • Ubuntu 12.04 LTS 或者更高
  • Python 2.7 with pip installed

安装

  1. 首先,通过 PPA 安装:

    1
    2
    3
    
    $ sudo add-apt-repository ppa:roman-imankulov/circus
    $ sudo apt-get update
    $ sudo apt-get install circus
    

  2. PPA 中的版本比较低(0.7.0),再通过 pip 升级:

    1
    
    $ sudo pip install -U circus
    

  3. 修改 /etc/init/circus.conf 文件为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    description "circusd"
    
    start on (net-device-up
             and local-filesystems
             and runlevel [2345])
    stop on runlevel [!2345]
    
    respawn
    
    exec /usr/local/bin/circusd \
           –log-level debug \
           –log-output /var/log/circus.log \
           –pidfile /var/run/circusd.pid \
           /etc/circus/circusd.ini
    

    重启服务 sudo service circus restart

    注意,这里原先的 /usr/bin/circusd 已经被我们改为了 /usr/local/bin/circusd,这是因为通过 pip 升级后地址改变了。

    之所以先用 PPA 安装再通过 pip 升级,是因为 PPA 安装之后,系统会设置好 Upstart/Services。包括以下三个文件:

    • /etc/circus/circusd.ini
    • /etc/init.d/circus
    • /etc/init/circus.conf

Upstart 文件介绍:https://www.digitalocean.com/community/tutorials/the-upstart-event-system-what-it-is-and-how-to-use-it

一个简短的 Python 应用示例

  1. 新建一个 Python 程序:/path/to/the/myprogram.py

    1
    2
    3
    4
    5
    
    import os
    from datetime import datetime
    
    with open(os.path.join(os.path.dirname(file), 'myprogram.log'), 'a') as f:
        f.write("{}: myprogram is running!\n".format(datetime.now()))
    

  2. 新建一个配置文件:/etc/circus/conf.d/myprogram.ini

    1
    2
    
    [watcher:myprogram]
    cmd = python /path/to/the/myprogram.py
    

  3. 重启 Circus 服务

    1
    
    $ sudo service circus restart
    

  4. 通过 tail -f /path/to/the/myprogram.log,观察运行。

一个简短的 Flask 应用示例

  1. 新建一个 Flask 应用:webapp.py,放在 /path/to/myapps/ 下

    1
    2
    3
    4
    5
    6
    7
    
    from flask import Flask
    
    app = Flask(name)
    
    @app.route('/')
    def index():
       return 'Circus Awesome!'
    

  2. 安装 virtualenv 与 Flask

    1
    2
    3
    4
    
    $ cd /path/to/myapps
    $ virtualenv venv
    $ source venv/bin/activate
    $ pip install flask chaussette
    

    Chaussette 是一个 WSGI 服务器。

  3. 新建一个配置文件:/etc/circus/conf.d/webapp.ini

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    [watcher:webapp]
    copy_env = True
    virtualenv = /path/to/myapps/venv
    working_dir = /path/to/myapps
    
    use_sockets = True
    cmd = chaussette webapp.app
    args = –fd $(circus.sockets.webapp)
    numprocesses = 5
    
    [socket:webapp]
    host = 0.0.0.0
    port = 5000
    

  4. 重启 Circus 服务

    1
    
    $ sudo service circus restart
    

  5. 访问 http://localhost:5000/

Comments