linux日志切割

nginx的日志不会自动切割,所以得借助第3方工具来进行切割
利用logrotate进行日志切割比利用crontab写脚本切割方便。
参考文档:http://blog.sina.com.cn/s/blog_5f54f0be0101h6y8.html
logrotate是作为linux系统日志的管理工具存在。他可以轮换,压缩,邮件系统日志文件。
它默认的配置文件在:
/etc/logrotate.conf
/etc/logrotate.d/


配置文件介绍:
========================
logrotate.conf 才主要的配置文件, logrotate.d 是一个目录, 该目录里的所有文件都会被主动的读入 /etc/logrotate.conf 中执行。
另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以 /etc/logrotate.conf 这个文件的设定来作为默认值。


切割介绍:
--------------------------
当第一次执行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存日志。而第二次执行之后, messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存日志!如果我们仅设定保留三个日志而已的话,那么执行第四次时,则 messages.3 这个档案就会被删除,并由后面的较新的保存日志所取代!也就是会保存最新的几个日志。


当然,这个得根据配置文件中的 dateext 参数来判定:


先看 logrotate.conf 的内容:


vim /etc/logrotate.conf
# 底下的设定是 "logrotate 的默认值" ,如果別的文件设定了其他的值,
# 就会以其它文件的设定为主


weekly    <==默认一周执行一次 rotate 工作
rotate 4  <==保留多少个日志文件.默认保留四个.
create    <==创建新的文件.因为日志被改名,因此要创建一个新的来继续存储之前的日志
dateext   <==文件后缀是日期格式,也就是切割后文件是:xxx.log-20131216.gz 这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1 这种格式
#compress <==是否压缩日志.


include /etc/logrotate.d
# 将 /etc/logrotate.d/ 目录中的所有文件都加载进来


/var/log/wtmp {       <==仅针对 /var/log/wtmp 所设定的参数
    monthly           <==每月一次切割,取代默认的一周
    minsize 1M        <==文件大小超过 1M 后才会切割
    create 0664 root utmp <==指定新建的日志文件权限以及所属用户和组
    rotate 1          <==只保留一个日志.
}
# 这个 wtmp 可记录用户登录系统及系统重启的时间
# 因为有 minsize 的参数,因此不见得每个月一定会执行一次喔.要看文件大小。


由这个文件的设定我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,虽然我们可以将所有的配置都给他写入 /etc/logrotate.conf ,但是这样一来这个文件就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理~ 
所以,如果独立出来一个目录,那么每个要切割日志的服务, 就可以独自成为一个文件,并且放置到 /etc/logrotate.d/ 当中


示例:
cd /etc/logrotate.d/ # 进入该目录
vim nginx # 通过vim新创建一个文件
文件内容:
/opt/modules/nginx/logs/*.log {
    daily
    dateext
    rotate 30
    compress
    create


    sharedscripts
    postrotate
        if [ -f /opt/modules/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /opt/modules/nginx/logs/nginx.pid`
        fi
    endscript
}
说明:
日志文件:
被处理的日志绝对路径.使用空格符分隔多个文件名;
执行脚本:
可调用外部指令来进行额外的命令,这个设定需与 sharedscripts .... endscript 设定合用才行。命令介绍:
prerotate:在启动 logrotate 之前进行的指令,例如修改文件的属性等动作;
postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务!
prerotate 与 postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序!


查看效果:
/usr/sbin/logrotate -vf nginx
logrotate [-vf] logfile选项与参数:
v: 启动显示模式,会显示 logrotate 执行的过程
f: 不论是否符合配置文件地规则,强制每个日志都进行 rotate 的动作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值