2011-10-02 362 views
21

我需要运行python脚本,并确保它会在终止后重新启动。我知道有叫做supervisord的UNIX解决方案。但不幸的是,服务器上我的脚本必须在Windows上运行。你知道什么工具可以有用吗? 谢谢有没有Windows模拟supervisord?

回答

32

尽管胖胖的声明here,您可以在Windows中运行带有Cygwin的Supervisor;事实证明,Cygwin很长一段时间来模拟一个Posix环境,事实上supervisord实际上并没有改变。不需要学习新的工具,如果您需要在多个平台上部署复杂的项目,您甚至可以节省相当多的工作。

这里是我的食谱:

  1. 如果你还没有这么做过,安装Cygwin。在安装过程中,选择Python。
  2. 从Cygwin终端,照常安装virtualenv
  3. 创建supervisord一个的virtualenv,然后照常安装:按照通常的方式

    pip install supervisord 
    
  4. 配置supervisord。请记住,supervisord将与Cygwin一起运行,因此,您最好使用Cygwin路径(C:\ myservers \ project1转换为Cygwin中的/ cygdrive/c/myservers/project1)。

  5. 现在,您可能想要安装supervisord作为服务。下面是我如何做到这一点:

    cygrunsrv --install supervisord --path /home/Administrator/supervisor/venv/bin/python --args "/home/Administrator/supervisor/venv/bin/supervisord -n -c /home/Administrator/supervisor/supervisord.conf" 
    
  6. 转至Windows服务管理器并启动服务supervisord刚刚安装。

第5点安装supervisord作为Windows服务,以便您可以从Windows服务管理器控制它(启动/停止/重新启动)。但是,您可以使用supervisorctl的功能照常工作,这意味着您可以简单地部署旧的配置文件。

+3

短暂通知:现在是“pip install supervisor”,它需要python 2.4+,但它不会与任何3+版本一起工作。 – Peon

9

您可能想运行您的脚本作为Windows Service。为此,您需要使用python-win32库。这question有很好的描述你如何去做这件事,以及到其他相关资源的一堆链接。这个question也可能有用。

A Windows Service是你想如何包装任何需要在Windows上连续运行的脚本。它们可以配置为在启动时自动启动,并处理故障。没有什么会阻止任何人杀死流程本身,但为了处理这种潜在的情况,您可以创建一个bat文件并使用sc命令来指示该服务是否正在运行以及是否重新启动该服务。只需安排bat文件每60秒运行一次(或任何合理的脚本可能会停止运行)。

+0

作为Windows服务运行python脚本将使它只能在后台运行。那还不够。我的目标是使脚本运行牢不可破。即使有人杀死脚本,脚本也必须重新启动。 – pss

+0

在这种情况下,使用bat文件,sc命令和系统调度程序来处理'已杀死'进程。看我的编辑。 –

5

如果你想,在大多数POSIX的操作系统上运行,并且,基于Python一样supervisord一个supervisord般的进程管理器,那么你应该看看町是工头的一个Python端口(基于Ruby):

http://pypi.python.org/pypi/honcho/

它在mac,linux上效果很好,但实际上还没有windows ...(编辑我的初始答案,我乐观地说它已经在Windows上工作,基于已被丢弃的拉请求)

这里有一个提供Windows支持的分支https://github.com/redpie/honcho 和一些正在进行的工作,以支持Windows在这里https://github.com/nickstenning/honcho/issues/28 ...至少它可能成为不久的将来可能的解决方案。

还有一个工头叉支持Windows在这里:https://github.com/ddollar/foreman-windows可能是为你工作,但我从来没有尝试过。

因此,目前,Windows服务可能是您最好的短期选择。

+3

本町的最新的TRUNK现在有Windows支持:)使用和享受 –

+0

嗨,律'关于本町的问题:是否真的应该重新启动失败的任务,像主管?当我“杀死”一个时,它不会。所以我们必须使用主管和本科的组合吗?谢谢。 – Ehvince

+0

其实honcho比主管更像工头。另请参阅https://blog.codeship.com/using-honcho-create-multi-process-docker-container/ –

相关问题