我在一台计算机上运行了两个Twitter Streaming APIs
,这两个python
进程都在supervisor
上运行。我想设计一个控制器,可以命令,停止/启动/重启两个进程。
一种方法是在该计算机上公开Web API,并在需要更改状态时点击该URL。它可以使用subprocess
重新启动Supervisord。
我正在阅读Pyro,这似乎是一个解决方案,可以在上一步中消除对API系统的需求。
我遗失的任何东西或任何其他解决方案都是这两个升级?
答案 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