Nginx日志按天截取并保存
- 2018-11-23 21:00:00
- 赵勤松 原创
- 2442
1.在镜像或已运行的容器中,加入/root/logsplit.sh文件,其内容如下
#!/bin/bash
log_path="/var/log/nginx"
now_ym=$(date -d yesterday +"%Y%m")
now_d=$(date -d yesterday +"%d")
mkdir -p $log_path/$now_ym
for logfile in $log_path/*.access.log
do
now_file=`echo "$logfile $now_d" | awk -F "$log_path/" '{print $2}' | awk -F ".access.| " '{print $1 "-" $3 ".access." $2}'`
mv -f "$logfile" "$log_path/$now_ym/$now_file"
done
for logfile in $log_path/*.error.log
do
now_file=`echo "$logfile $now_d" | awk -F "$log_path/" '{print $2}' | awk -F ".error.| " '{print $1 "-" $3 ".error." $2}'`
mv -f "$logfile" "$log_path/$now_ym/$now_file"
done
kill -USR1 `cat /var/run/nginx.pid`
简单来说,脚本的执行过程是,创建以年份+月份的分割日志保存目录,先提取后缀为".access.log"的日志文件(有多个虚拟站点,日志的形式为xxx.access.log,xxx.error.log),过滤掉目录部分,再将名称替换为xxx-天数.access.log的形式,然后将原来的日志移动到分割日志保存目录,错误日志也做同样的处理,最后,发送信号给nginx主进程,释放原来的文件句柄,并生成新的日志文件。
保存的logsplit.sh文件,需要使用chmod a+赋予执行权限。
接下来,我们需要在Nginx容器所在的服务器上,使用crontab增加一项定时任务
1 0 * * * /usr/bin/docker exec nginx_site /root/logsplit.sh
这样,每天凌晨00:01分,命名为nginx_site的Docker容器,将自动切割日志
文章分类
联系我们
| 联系人: | powereye |
|---|---|
| Email: | zqs@someapp.cn |
| QQ: | 1134846 |
| 微信: | powereye |