我有一個開發服務器,我經常通過Git推動代碼更改。每次推後,我需要手動登錄到服務器並重新啓動監督程序進程。有沒有辦法自動重新加載Supervisor進程?
有沒有辦法讓Supervisor監視文件系統目錄的更改並重新裝載更改的進程?
我有一個開發服務器,我經常通過Git推動代碼更改。每次推後,我需要手動登錄到服務器並重新啓動監督程序進程。有沒有辦法自動重新加載Supervisor進程?
有沒有辦法讓Supervisor監視文件系統目錄的更改並重新裝載更改的進程?
您應該可以使用Event Listener來監視文件系統(可能是watchdog),並使用XML-RPC API發出重新啓動。請查看superlance包裝中的memmon
聽衆以獲取靈感。它不需要那麼複雜。由於看門狗會打電話給你的重啓程序,你不需要使用childutils.listener.wait
來讀取事件。
或者,如果權限是正確的supervisord API被訪問(套接字權限,HTTP密碼),git鉤子可能會做的伎倆。更簡單但不太安全的方法。
一個更簡單,甚至不太安全的方法是讓你發出supervisorctl restart
。正在運行的用戶必須匹配您的推送用戶(或者git或www,具體取決於您如何設置)。洛特的方式使安全方面出錯。但爲了發展,可能會很好。
相關:
我還沒有找到任何解決辦法,所以我試圖讓我自己。 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
路徑監視的文件,socket
是supervisorctl
插座部分和program
是從[program:<name>]
部分定義的程序名稱。 也可用--username
和--password
,你可以使用,如果你有自定義管理員配置。
雖然不是一個使用監督者的解決方案,但我通常在受監督的應用程序中解決了這個問題。例如,將--reload標誌添加到gunicorn,並且它會在您的應用程序更改時重新加載。
所以,這不是一個真正的解決方案,更像是「如何創建解決方案」。所以現在差不多3年之後,是否仍然沒有真正的解決方案來解決我認爲是非常普遍的問題? – hackel