Nginx + FastCGI上的Django站点(504网关超时)

时间:2010-03-18 00:54:51

标签: python django timeout fastcgi restart

有时我的整个基于Django的网站会出现504个网关超时错误,因此无法显示任何页面。

是否可以编写一个shell程序,并且每隔5分钟运行一次cronjob来检测此类错误并在需要时重新启动FastCGI进程?

我目前正在使用下面的命令来重启FastCGI以防它崩溃,但它不能用于上述情况,因为当发生504网关错误时,进程仍在运行。

ps ax | grep -v grep | grep port=8001 > /dev/null || restart_fcgi.sh

2 个答案:

答案 0 :(得分:3)

也许您应该找出为什么该网站首先开始提供504错误 - 检查日志(或者如果您没有足够的信息则添加日志记录),并解决问题所在。或者,您可能会发现nginx + apache + mod_wsgi是一种更稳定的方法 - nginx是一个非常棒的前端Web服务器,用于提供静态内容,但Apache非常适合托管动态进程。尝试将它们两者结合起来。我曾经使用nginx + fastcgi,但我发现前者是一种更稳定的方法。

如果仍然无法确定导致问题的原因,可以设置一个本地运行的监控脚本并检查响应代码 - 如果找到5XX,它可以强制重启fastcgi进程。你可以使用Python + httplib作为脚本,运行shell脚本的os.system(加上一个合适的kill -9语句)。

答案 1 :(得分:0)

我想如果你遇到这个问题,那么supervisor就是你的朋友。一个非常好的朋友。像daemontools一样,除了简单的配置,很多帮助和非root用法。

你应该试着找到问题,但无论如何,一小时的准备工作意味着你可以依靠在失败后重新启动的过程足够长的时间来过上你的生活。