2013-11-26 84 views

回答

5

您應該可以使用Event Listener來監視文件系統(可能是watchdog),並使用XML-RPC API發出重新啓動。請查看superlance包裝中的memmon聽衆以獲取靈感。它不需要那麼複雜。由於看門狗會打電話給你的重啓程序,你不需要使用childutils.listener.wait來讀取事件。

或者,如果權限是正確的supervisord API被訪問(套接字權限,HTTP密碼),git鉤子可能會做的伎倆。更簡單但不太安全的方法。

一個更簡單,甚至不太安全的方法是讓你發出supervisorctl restart。正在運行的用戶必須匹配您的推送用戶(或者git或www,具體取決於您如何設置)。洛特的方式使安全方面出錯。但爲了發展,可能會很好。

相關:

+6

所以,這不是一個真正的解決方案,更像是「如何創建解決方案」。所以現在差不多3年之後,是否仍然沒有真正的解決方案來解決我認爲是非常普遍的問題? – hackel

5

我還沒有找到任何解決辦法,所以我試圖讓我自己。 Here it is

您可以通過這個命令來安裝軟件包:

pip install git+https://github.com/stavinsky/supervisord-touch-reload.git 

(我將它添加一些測試後加入的PyPI。)

設立位於示例文件夾中的github主管的一個例子。我相信文件很快就會到來。 基本上所有你需要開始使用這個模塊是添加事件監聽command,如:

python -m touch_reload --socket unix:///tmp/supervisor.sock --file <path/to file file> --program <program name>

其中file是將與絕對或相對directory路徑監視的文件,socketsupervisorctl插座部分和program是從[program:<name>]部分定義的程序名稱。 也可用--username--password,你可以使用,如果你有自定義管理員配置。

+1

感謝您發表本文。似乎運作良好。奇怪的是,沒有內置的解決方案來做這樣的事情 – edwardmp

+0

歡迎。很高興知道這對某人有幫助。如果您有任何問題或想法如何改進,使這個腳本更好的寫在這裏或在github上 – Stavinsky

+0

這個解決方案一次只監視一個文件嗎? https://github.com/gorakhargosh/watchdog會讓你看整個目錄。 –

1

雖然不是一個使用監督者的解決方案,但我通常在受監督的應用程序中解決了這個問題。例如,將--reload標誌添加到gunicorn,並且它會在您的應用程序更改時重新加載。

相關問題