工作中使用gunicorn作为服务器的时候,通过配置文件来启动的,gunicorn启动参数可以从--help中获取,但是配置文件中,没有,下面是一些常见的选项的配置和说明
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
bind = '0.0.0.0:9010' #绑定的ip已经端口号
backlog = 512 #监听队列
chdir = '/home/test/server/bin' #gunicorn要切换到的目的工作目录
timeout = 30 #超时
worker_class = 'gevent' #使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = 16 #进程数
threads = 2 #指定每个进程开启的线程数
loglevel = 'info' #日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"' #设置gunicorn访问日志格式,错误日志无法设置
其每个选项的含义如下
"""
h remote address
l '-'
u currently '-', may be user name in future releases
t date of the request
r status line (e.g. ``GET / HTTP/1.1``)
s status
b response length or '-'
f referer
a user agent
T request time in seconds
D request time in microseconds
L request time in decimal seconds
p process ID
{Header}i request header
{Header}o response header
"""
accesslog = "/dev/null" #访问日志文件的路径
errorlog = "/dev/null" #错误日志文件的路径
公司的server日志都是按天分割的,多进程中TimeRotatingFileHandler分割日志还是会出问题的,于是便使用了
WatchedFileHandler来记录日志,在server机器上,凌晨加一个自动任务,这样日志就能切割了,但是gunicorn
的logging默认使用的是FileHandler,但是一旦当自动任务备份的时候,它不会自动重新创建,于是便把原有的FileHandler流重定向到了/dev/null,自己再另外添加我想要的Handler即可,如下:
"""
acclog = logging.getLogger('gunicorn.access')
acclog.addHandler(WatchedFileHandler('/home/test/server/log/gunicorn_access.log'))
acclog.propagate = False
errlog = logging.getLogger('gunicorn.error')
errlog.addHandler(WatchedFileHandler('/home/test/server/log/gunicorn_error.log'))
errlog.propagate = False
"""
公司gunicorn 与nginx配合使用,nginx只需要设置一个反向代理
proxy_pass http://127.0.0.1:9010 ;即可
"""