Windows中有类似supervisord的工具吗?

30 投票
6 回答
37279 浏览
提问于 2025-04-17 03:33

我需要运行一个Python脚本,并确保它在结束后能自动重启。我知道在UNIX系统上有个叫做supervisord的工具。但不幸的是,我的脚本要运行的服务器是Windows系统。你知道有什么工具可以帮忙吗?谢谢!

6 个回答

6

如果你想要一个类似于 supervisord 的进程管理工具,它可以在大多数 posix 操作系统上运行,并且是基于 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 服务可能是你最好的短期选择。

11

你可能想把你的脚本当作一个 Windows 服务 来运行。要做到这一点,你需要使用 python-win32 这个库。这个 问题 对于如何实现这一点有很好的描述,还有很多相关资源的链接。另一个 问题 也可能对你有帮助。

Windows 服务 是一种可以让你把需要在 Windows 上持续运行的脚本封装起来的方式。你可以设置它们在开机时自动启动,并且能够处理一些故障。虽然没有人能阻止别人强行结束这个进程,但为了应对这种情况,你可以创建一个 bat 文件,使用 sc 命令来检查这个服务是否在运行,如果没有,就重新启动它。你只需要把这个 bat 文件设置为每60秒运行一次(或者根据你的脚本需要的合理时间来设置)。

44

尽管这里有个很大的免责声明在这里,你还是可以在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能做的事情还是和以前一样,这意味着你可以直接使用你旧的配置文件。

撰写回答