2020年5月

在服务器中,一个应用程序只要接收到请求就会产生日志记录,日积月累,会占用很多磁盘空间,也不利于日志跟踪。
很多人会自己写sh脚本定时执行去手动分割日志,其实linux本身自带了一个日志分割轮替神器,就是logrotate。
不需要添加定时脚本,也不需要编写维护sh脚本,只需简单几个配置,就可以实现日志分割轮替。

编辑配置文件 vim /etc/logrotate.conf

weekly --时间参数 weekly按周、yearly按年、monthly按月、daily按日
rotate 4  --转存保留多少份日志
create  --指定转存日志权限
dateext
include /etc/logrotate.d
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

nignx日志分割,新增 /etc/logrotate.d/nginx 文件
vim /etc/logrotate.d/nginx
新增一下内容

/usr/local/nginx/logs/*.log {
       daily  #每日轮替
       rotate 7  #保留7个日志文件
       compress  #对日志进行压缩
       missingok  #如果日志不存在,则忽略改日志的警告信息
       dateext  #使用日期作为日志轮替文件的后缀
       notifempty #如果日志为空文件,则不进行日志轮替
        sharedscripts  #所有文件分割后在执行后面的脚本
        postrotate #脚本开始标识
         kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        endscript #脚本结束标识
}

如果是version 2 以上的版本 postrotate/endscript 可以换为

/usr/local/nginx/logs/*.log {
       daily  #每日轮替
       rotate 7  #保留7个日志文件
       compress  #对日志进行压缩
       missingok  #如果日志不存在,则忽略改日志的警告信息
       dateext  #使用日期作为日志轮替文件的后缀
       notifempty #如果日志为空文件,则不进行日志轮替
       copytruncate # 把原日志文件拷贝一份重命名,然后清空原始文件
}