有没有Windows类似的管理



我需要运行python脚本,并确保它将在终止后重新启动。我知道UNIX有一种解决方案叫superord。但不幸的是,我的脚本必须运行的服务器是在Windows上。你知道什么工具是有用的吗?由于

尽管这里有很大的免责声明,但您可以在Windows中使用Cygwin运行Supervisor;事实证明,Cygwin在模拟Posix环境方面走了很长的路,以至于实际上监督运行不变。不需要学习新工具,如果需要跨多个平台部署复杂的项目,甚至可以节省大量工作。

这是我的食谱:

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

    pip install supervisord
    
  4. 按常规配置。请记住,superord将与Cygwin一起运行,因此您最好使用Cygwin方式的路径(C:myserversproject1在Cygwin中翻译为/cygdrive/C/myservers/project1)。

  5. 现在你可能想把监理作为一个服务来安装。我是这样做的:

    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服务管理器,启动刚刚安装的服务管理器

第5点将superord安装为Windows服务,以便您可以从Windows服务管理器控制它(启动/停止/重新启动)。但是您可以使用supervisorctl做的事情与往常一样,这意味着您可以简单地部署旧的配置文件。

您可能希望将脚本作为Windows Service运行。为此,您需要python-win32库。这个问题很好地描述了如何做到这一点,以及其他相关资源的链接。这个问题也可能有用。

一个Windows Service是你想如何包装任何脚本,需要在Windows上连续运行。可以将它们配置为在引导时自动启动,并处理故障。没有什么可以阻止任何人杀死进程本身,但是要处理这种潜在的情况,您可以创建一个bat文件并使用sc命令轮询服务,看看它是否正在运行,如果没有重新启动服务。只需将bat文件安排为每60秒运行一次(或者您的脚本可能关闭的任何合理时间)。

如果你想要一个类似于supervisor的进程管理器,运行在大多数posix操作系统上,并且是基于Python的,那么你应该看看honcho,它是foreman的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的foreman fork: https://github.com/ddollar/foreman-windows,可能对你有用,虽然我从来没有尝试过。

所以现在,Windows服务可能是你最好的短期选择。

Windows的supervisor在python27 - 32位上为我们工作。我必须安装pypiwin32和pywin32==223.

由于这是一个有老答案的老问题,我将用最新消息更新它:

有一个supervisor-win项目声称在Windows上支持supervisor .

不支持,Windows下不支持superord

但是你可以做的是,从包装器脚本中自动重新启动它:

#!/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()

最新更新