Gunicorn内服务器错误

0 投票
1 回答
2900 浏览
提问于 2025-04-16 22:04

我有一个运行Django应用的Gunicorn服务器,但它经常崩溃。可惜的是,当它崩溃时,所有的Gunicorn工作进程都会同时停止,而且不会记录任何日志,包括Django和django-sentry的日志。所有的工作进程都会返回“内部服务器错误”,但是管理进程(arbiter)并不会崩溃,所以supervisord不会把它当作崩溃来处理,也就不会重启这个进程。

我想问的是,有没有办法在Gunicorn工作进程崩溃时进行一些操作,比如发送邮件或者记录日志?另外,有没有办法让supervisord重启那些只返回500错误的Gunicorn服务器?

谢谢!

1 个回答

1

我非常推荐使用zc.buildout。下面是一个使用Superlance插件来配合supervisord和buildout的例子:

[supervisor]
recipe = collective.recipe.supervisor
plugins =
   superlance
...
programs =
     10 zeo ${zeo:location}/bin/runzeo ${zeo:location}
     20 instance1 ${instance1:location}/bin/runzope ${instance1:location} true
...
eventlisteners =
     Memmon TICK_60 ${buildout:bin-directory}/memmon [-p instance1=200MB]
     HttpOk TICK_60 ${buildout:bin-directory}/httpok [-p instance1 -t 20 http://localhost:8080/]

这个例子每20秒会进行一次HTTP请求,如果请求失败,就会重启进程。

http://pypi.python.org/pypi/collective.recipe.supervisor/0.16

撰写回答