【问题标题】:Is there Windows analog to supervisord?是否有类似于supervisord的Windows?
【发布时间】:2011-11-29 14:20:54
【问题描述】:

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

【问题讨论】:

    标签: python windows supervisord


    【解决方案1】:

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

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

    【讨论】:

    • 将 python 脚本作为 Windows 服务运行将使其仅在后台运行。那还不够。我的目标是使脚本运行牢不可破。即使有人杀死它,也必须重新启动脚本。
    • 在这种情况下,使用 bat 文件、sc 命令和系统调度程序来处理“已终止”进程。查看我的编辑。
    【解决方案2】:

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

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

    它在 mac、linux 上运行良好,但(实际上)还不是 windows...(编辑我最初的答案,我乐观地说它已经在 windows 上运行,基于从那时起被丢弃的拉取请求)

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

    这里还有一个支持 Windows 的工头分支:https://github.com/ddollar/foreman-windows,它可能对你有用,虽然我从未尝试过。

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

    【讨论】:

    • honcho的最新TRUNK现在支持windows了:)使用和享受
    • 嗨,关于 Honcho 的问题:真的应该重启失败的任务,比如 supervisor 吗?当我kill 一个时它不会。那么我们必须使用 supervisor 和 honcho 的组合吗?谢谢。
    • 其实honcho更像是工头而不是主管。另见blog.codeship.com/…
    【解决方案3】:

    尽管有很大的免责声明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 服务管理器并启动您刚刚安装的服务主管。

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

    【讨论】:

    • 一个简短的通知:现在是pip install supervisor,它需要python 2.4+,但它不适用于任何3+版本。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      不,在 Windows 下不支持 supervisord。

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

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

      【讨论】:

        【解决方案6】:

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

        有一个supervisor-win 项目声称支持Windows 上的supervisor。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 2015-05-15
          • 2014-09-17
          • 2012-01-21
          • 1970-01-01
          相关资源
          最近更新 更多