用于python进程的远程控制器

时间:2015-09-07 06:32:06

标签: python ubuntu subprocess monitoring supervisor

我在一台计算机上运行了两个Twitter Streaming APIs,这两个python进程都在supervisor上运行。我想设计一个控制器,可以命令,停止/启动/重启两个进程。

一种方法是在该计算机上公开Web API,并在需要更改状态时点击该URL。它可以使用subprocess重新启动Supervisord。

我正在阅读Pyro,这似乎是一个解决方案,可以在上一步中消除对API系统的需求。

我遗失的任何东西或任何其他解决方案都是这两个升级?

3 个答案:

答案 0 :(得分:1)

我非常确定主管可以为您做到这一点,请查看

http://supervisord.org/api.html

Supervisor包含一个xml rpc来控制它下面的进程,你只需要配置它。请查看文档和本指南

http://devo.ps/blog/using-supervisord-for-your-deploy-pipelines/

他在那里配置rpc接口

答案 1 :(得分:0)

正如您所提到的,我将使用作为守护进程运行的CherryPy来公开REST API。 它更简单,你唯一需要控制它的是一个请求。如果需要,您可以添加参数以及稍后创建更丰富的其他请求。此外,您可以在Windows中将其用作Windows服务。 https://cherrypy.readthedocs.org/en/3.2.6/refman/process/plugins/daemonizer.html

答案 2 :(得分:0)

群集管理工具非常适合这样的用例。您获得的好处是,当您拥有多台计算机时,该解决方案甚至可以运行。 检查ansible supervisor插件,例如: http://docs.ansible.com/ansible/supervisorctl_module.html

您只需要从运行ansible的远程计算机调用命令,因为它是无代理的,它将负责其余部分。请参阅下面我为类似内容编写的剧本:

    ---
    - hosts: webservers
      user: admin
      sudo: yes
      sudo_user: root
      vars:
        node_env: "{{ DEPLOY_ENV|default(staging) }}"
      vars_files:
        - ../vars/secret
        - ../vars/main.yml
        - ../defaults/main.yml

      tasks:

      # Manage Supervisor web tasks - restart them in a specific order
      - name: Restart Data API supervisor Job
        supervisorctl: name="web:data_api" state=restarted
      - name: Restart Data API-2 supervisor Job
        supervisorctl: name="web:data_api2" state=restarted

      handlers:
       - name: test all
         shell: source /etc/profile.d/go-api.sh && source /etc/profile.d/go-path.sh && source /etc/profile.d/go-bin.sh && cd /opt/go/src/github.com/pgaref/data_api && go test . ./... executable=/bin/bash
         shell: source /etc/profile.d/go-api.sh && source /etc/profile.d/go-path.sh && source /etc/profile.d/go-bin.sh && cd /opt/go/src/github.com/pgaref/data_api2 && go test . ./... executable=/bin/bash