有没有Windows模拟supervisord?

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

尽管这里有大量的免责声明,您可以在Windows中运行Cygwin的 Supervisor; 事实证明,Cygwin很长一段时间来模拟一个Posix环境,事实上supervisord运行不变。 没有必要学习一个新的工具,如果你需要在多个平台上部署一个复杂的项目,你甚至可以节省很多工作。

这是我的食谱:

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

    pip install supervisord 
  4. 以通常的方式配置supervisord。 请记住,supervisord将与Cygwin一起运行,因此您最好使用Cygwin路径(在Cygwin中将C:\ myservers \ project1转换为/ 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服务管理器并启动您刚刚安装的服务监督。

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

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

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

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

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

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

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

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

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