Nginx日志按天截取并保存
- 2018-11-23 21:00:00
- 赵勤松 原创
- 2263
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 |