需要在uwsgi的配置文件中,添加 touch-logreopen, flask项目根目录下 uwsgi 的配置文件 uwsgi.ini 的内容如下:
[uwsgi]
# 启动主线程
master = true
#项目运行的虚拟环境目录
home = venv
#指定加载的WSGI文件
wsgi-file = wsgi.py
#指定uWSGI加载的模块中哪个变量将被调用
callable = app
#指定socket地址, 5000端口号
socket = :5000
#设置工作进程的数量
processes = 4
#设置每个工作进程的线程数
threads = 2
#监听请求队列的个数
listen = 1024
#主进程pid写到指定的文件
pidfile = uwsgi.pid
#不记录请求信息的日志,只记录错误以及uWSGI内部消息到日志中
#disable-logging = true
#进程在后台运行,并将日志打印到指定文件
daemonize = ./logs/uwsgi.log
#设置一个监听对象
touch-logreopen = ./logs/.touchforlogrotat
当监听对象 touch-logreopen 所指向的文件被touch,时间戳改变后,uwsgi会重新打开uwsgi.log文件进行写入,且不会中断当前程序的执行。如果没有touch-logreopen这个监听对象,是无法对uwsgi.log进行转储的。
通过crontab设置定时任务,命令行下输入:
crontab -e
会进入一个当前用户的文件,在这个文件中添加下面这行操作:
'''
* * * * * 执行任务
第一个* 一小时当中的第几分钟:0-59
第二个* 一天当中的第几个小时:0-23
第三个* 一月当中的第几天:1-31
第四个* 一年当中的第几个月:1-12
第五个* 一周当中的第几个星期:0-7 0,7都代表周日
'''
0 0 * * * sh /path/to/logbackups.sh #代表每天0点执行脚本 logbackups.sh
其中,脚本的内容 logbackups.sh 如下:
#!/bin/bash
#日志所在目录
LOGDIR="/path/to/logs/"
DATE=`date -d "yesterday" +"%Y-%m-%d"`
NEWDIR="/path/to/logs/${DATE}"
mkdir -p ${NEWDIR}
#将旧日志重新以日期命名
mv ${LOGDIR}/uwsgi.log ${NEWDIR}/uwsgi-${DATE}.log
touch /path/to/.touchforlogrotat