我将所有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'
是名完美 - 只有杀死当前站点,我只更新当前站点,因此仅这一项应该死
- 是否以优雅的方式重新启动如果可能的话,它应该等到没有更多的活动连接时,我不知道这有多可行。