前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 日志切割

Nginx 日志切割

作者头像
剧终
发布2021-01-14 11:14:18
1.3K0
发布2021-01-14 11:14:18
举报
文章被收录于专栏:Linux学习日志Linux学习日志

日志切割

代码语言:javascript
复制
当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大,文件大速度就会慢下来,比如一个文件几百兆,写入日志的时候,就会影响操作速度.
手动切割
代码语言:javascript
复制
--进入日志目录
cd /usr/local/nginx/logs/

--重命名日志文件
[root@host1 logs]# mv access{,.$(date +%F)}.log
[root@host1 logs]# ls
access.2020-09-18.log  access.log  error.log  nginx.pid

--发送信号,执行重命名日志文件命令后,日志目录中自动生成了一个新的'access.log'文件
/usr/local/nginx/sbin/nginx -s reopen

重命名日志文件后,'nginx'日志仍然会写入到"access.2020-09-18.log"文件中,并不会自动创建一个新的"access.log"文件
即使你手动创建了一个新的'access.log'文件,'nginx'仍然会把日志写入到重命名后的'access.2020-09-18.log''文件中
这是因为nginx进程读写日志文件时,是通过文件描述符去操作的,虽然我们修改了原'access.log'文件的文件名,但是原文件描述符与文件本身的对应关系仍然存在
所以,重命名后,我们需要让nginx重新打开一个新文件,以便将新的日志写入到新文件中
编写脚本
代码语言:javascript
复制
--编写脚本实现日志切割,可以配合'crontab'计划任务
[root@host1 /]# vim /nginx_logs.sh
#!/bin/bash
a_logs="/usr/local/nginx/logs/access.log"
b_logs="/usr/local/nginx/logs/access{,.$(date +%F)}.log"

if [ -f "$a_logs" ];then
        mv "$a_logs" "$b_logs"
fi

/usr/local/nginx/sbin/nginx -s reopen
logrotate
代码语言:javascript
复制
--配置文件
/etc/logrotate.conf    主配置文件
/etc/logrotate.d/    子配置文件目录
编辑配置文件
代码语言:javascript
复制
--编辑子配置文件
[root@host1 /]# vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/access.log  {
daily
rotate 7
missingok
dateext
compress
delaycompress
notifempty
sharedscripts
postrotate
    [ -e /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}
代码语言:javascript
复制
--配置参数解释
/usr/local/nginx/logs/access.log    指定需要轮转处理的日志文件
daily    日志文件轮转周期,可用值为'daily/weekly/yearly'
rotate 7    轮转次数,即最多存储7个归档日志,会删除最久的归档日志
missingok    忽略错误信息
dateext        以当前日期作为命名格式
compress    轮循结束后,已归档日志使用gzip进行压缩
delaycompress     与compress共用,最近的一次归档不要压缩
notifempty        日志文件为空,轮循不会继续执行
sharedscripts    表示postrotate脚本在压缩了日志之后只执行一次
postrotate        将日志文件转储后执行的命令,以endscript结尾,命令需要单独成行
endscript        重启nginx日志服务,写入到新的文件中去,否则会依然写入重命名后的文件中
启动
代码语言:javascript
复制
--启动'logrotate'并且指定配置文件切割
[root@host1 /]# logrotate -f /etc/logrotate.d/nginx

--验证
[root@host1 /]# ls /usr/local/nginx/logs/
access.log  access.log-20200918  error.log  logs.sh  nginx.pid
USR1信号
代码语言:javascript
复制
'USR1'信号是为了告诉'nginx'进程重新打开日志文件
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 日志切割
    • 手动切割
      • 编写脚本
    • logrotate
      • 编辑配置文件
      • 启动
    • USR1信号
    相关产品与服务
    日志服务
    日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档