2011-10-02 365 views
21

我需要運行python腳本,並確保它會在終止後重新啓動。我知道有叫做supervisord的UNIX解決方案。但不幸的是,服務器上我的腳本必須在Windows上運行。你知道什麼工具可以有用嗎? 謝謝有沒有Windows模擬supervisord?

回答

32

儘管胖胖的聲明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服務管理器並啓動服務supervisord剛剛安裝。

第5點安裝supervisord作爲Windows服務,以便您可以從Windows服務管理器控制它(啓動/停止/重新啓動)。但是,您可以使用supervisorctl的功能照常工作,這意味着您可以簡單地部署舊的配置文件。

+3

短暫通知:現在是「pip install supervisor」,它需要python 2.4+,但它不會與任何3+版本一起工作。 – Peon

9

您可能想運行您的腳本作爲Windows Service。爲此,您需要使用python-win32庫。這question有很好的描述你如何去做這件事,以及到其他相關資源的一堆鏈接。這個question也可能有用。

A Windows Service是你想如何包裝任何需要在Windows上連續運行的腳本。它們可以配置爲在啓動時自動啓動,並處理故障。沒有什麼會阻止任何人殺死流程本身,但爲了處理這種潛在的情況,您可以創建一個bat文件並使用sc命令來指示該服務是否正在運行以及是否重新啓動該服務。只需安排bat文件每60秒運行一次(或任何合理的腳本可能會停止運行)。

+0

作爲Windows服務運行python腳本將使它只能在後臺運行。那還不夠。我的目標是使腳本運行牢不可破。即使有人殺死腳本,腳本也必須重新啓動。 – pss

+0

在這種情況下,使用bat文件,sc命令和系統調度程序來處理'已殺死'進程。看我的編輯。 –

5

如果你想,在大多數POSIX的操作系統上運行,並且,基於Python一樣supervisord一個supervisord般的進程管理器,那麼你應該看看町是工頭的一個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在這裏:https://github.com/ddollar/foreman-windows可能是爲你工作,但我從來沒有嘗試過。

因此,目前,Windows服務可能是您最好的短期選擇。

+3

本町的最新的TRUNK現在有Windows支持:)使用和享受 –

+0

嗨,律'關於本町的問題:是否真的應該重新啓動失敗的任務,像主管?當我「殺死」一個時,它不會。所以我們必須使用主管和本科的組合嗎?謝謝。 – Ehvince

+0

其實honcho比主管更像工頭。另請參閱https://blog.codeship.com/using-honcho-create-multi-process-docker-container/ –

相關問題