有没有类似于supervisord的Windows替代品?

30

我需要运行Python脚本并确保它在终止后能够重新启动。我知道有一个名为supervisord的UNIX解决方案。但不幸的是,我的脚本必须在Windows服务器上运行。您知道有什么工具可以帮助吗? 谢谢

我需要运行 Python 脚本,并确保它在终止后能够重新启动。我知道在 UNIX 上有一个名为 supervisord 的解决方案,但很遗憾,要运行我的脚本的服务器是在 Windows 上。请问您是否了解任何有用的工具?
谢谢。
6个回答

44

尽管在这里有一个大而明显的免责声明,但是你可以使用Cygwin在Windows操作系统上运行Supervisor;事实证明,Cygwin可以模拟Posix环境,在这种情况下,supervisord运行不会有任何变化。你无需学习新工具,并且如果需要在多个平台上部署复杂的项目,使用Cygwin甚至可以节省相当多的工作。

以下是步骤:

  1. 如果您还没有安装过Cygwin,请安装Cygwin。在安装过程中,选择Python。
  2. 从Cygwin终端像往常一样安装virtualenv
  3. 为supervisord创建虚拟环境,然后像往常一样安装:

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

  5. 现在,您可能想将supervisord安装为服务。以下是我的操作方法:

  6. cygrunsrv --install supervisord --path /home/Administrator/supervisor/venv/bin/python --args "/home/Administrator/supervisor/venv/bin/supervisord -n -c /home/Administrator/supervisor/supervisord.conf"
    
  7. 前往Windows服务管理器,启动您刚安装的服务supervisord。

步骤5将supervisord安装为Windows服务,这样您可以从Windows服务管理器控制它(启动/停止/重启)。但是,您仍然可以像往常一样使用supervisorctl来执行操作,也就是说,您可以简单地部署旧的配置文件。


7
短消息:现在应该使用 pip install supervisor 进行安装,它需要 Python 2.4 或更高版本,但不支持任何 3+ 版本。请留意。 - Peon

11

您可能希望将脚本作为 Windows服务 运行。要这样做,您需要使用python-win32库。这个问题很好地描述了如何执行此操作,并提供了许多其他相关资源的链接。这个问题也可能有用。

Windows服务 是您希望在 Windows 上持续运行任何脚本的方式。它们可以配置为在启动时自动启动,并处理故障。没有什么可以阻止任何人杀死进程本身,但是为了处理这种潜在情况,您可以创建一个bat文件并使用sc命令轮询服务以查看是否正在运行,如果未运行,则重新启动服务。只需安排bat文件每60秒(或适当的时间)运行一次即可。


将Python脚本作为Windows服务运行只会让它在后台运行,这还不够。我的目标是使脚本运行无法被中断。即使有人强制停止了脚本,它也必须重新启动。 - pss
在这种情况下,使用批处理文件、sc命令和系统计划程序来处理“被杀死”的进程。请参见我的编辑。 - Mark Gemmill
也许这在11年前是真的。但是今天,如果你进入Windows服务属性页面的“恢复”选项卡,你会发现有重新启动失败时的选项。 - undefined

6
如果您想要一个类似于supervisord的进程管理器,可以在大多数posix操作系统上运行,并且像supervisord一样基于Python,那么您应该看看honcho,它是foreman(基于Ruby)的Python端口:

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

它在Mac和Linux上运行得很好,但实际上还没有在Windows上运行...(编辑我的最初答案,在那里我乐观地说它已经可以在Windows上工作了,但这个拉取请求已经被放弃了)

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

这里还有一个foreman分支来支持Windows:https://github.com/ddollar/foreman-windows ,可能适合您,尽管我从未尝试过。

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


3
最新版的Honcho现在支持Windows系统 :) 请使用并享受。 - Philippe Ombredanne
嗨,关于Honcho有一个小问题:它是否真的应该像supervisor一样重新启动失败的任务?当我“kill”一个任务时它并没有重新启动。所以我们是否需要同时使用supervisor和honcho?谢谢。 - Ehvince
实际上,"honcho" 更像是 "foreman" 而不是 "supervisor"。请参见 https://blog.codeship.com/using-honcho-create-multi-process-docker-container/。 - Philippe Ombredanne

3

3

由于这是一个旧问题,有着旧的答案,我将使用最新消息进行更新:

现在有一个名为supervisor-win的项目声称支持Windows上的Supervisor。


-1

不,supervisord 不支持 Windows。

但是你可以编写一个包装脚本来自动重启它:

#!/usr/bin/python
from subprocess import Popen

file_path = " script_to_be_restarted.py"
args_as_str = " --arg1=woop --arg2=woop"

while True:
    print("(Re-)Start script %s %s" % (file_path, args_as_str))
    p = Popen("python " + file_path + args_as_str, shell=True)
    p.wait()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接