我將所有Django站點都作爲SCGI守護程序運行。我不會進入的,爲什麼我這樣做基本面,但是這意味着,當一個網站正在運行,有一組從下面的命令運行的進程:從VCS更新現場服務器
/websites/website-name/manage.py runfcgi method=threaded host=127.0.0.1 port=3036 protocol=scgi
一切都很好,直到我想滾從VCS發佈一個新版本(我的情況是Bazaar)。我做了一個別名腳本調用,做如下:
alias up='bzr up; killall manage.py'
這是這通用的,原因很簡單:我很懶。我想要一個可以在任何網站下使用的命令來更新它。無論如何,我大部分時間都登錄了服務器,因此,我只是跳到正確的站點的根目錄並致電up
。來自BZR的網站更新並重新啓動。
它的第一個缺點是它殺死了機器上的所有manage.py進程。目前有6個網站正在迅速增長。第二個(也可能更糟 - 至少對於最終用戶來說)是嚴重的非優雅重啓。如果有人正在上傳圖片或做長時間連接的其他事情,他們的請求就會死在藤蔓上。
所以,我正在尋找的是對於一個方法建議:
- 是通用懶人像我這樣的(例如,我可以從任何站點根目錄下運行,而不必記住哪個命令我需要調用;。
'up'
是名完美 - 只有殺死當前站點,我只更新當前站點,因此僅這一項應該死
- 是否以優雅的方式重新啓動如果可能的話,它應該等到沒有更多的活動連接時,我不知道這有多可行。