Linux系统使用logrotate进行日志备份

Linux系统上日志文件很多很多,系统日志message mail cron 等等以及应用程序的日志和访问日志,在大量的访问下,这些日志文件会飞速增长,占用大量私盘空间,同时消耗IO,目前线上使用shell脚本对nginx和tomcat的access_log以及catalina.out文件通过crontab进行日志分割。



今天偶然想起logrotate,小试了下,还是不错的,记录下。。。

查看下log目录下的日志,可以看到关于crontab的日志被分割了,我们没有定义这个,是什么实现的呢?就是logrotate咯。

ll /var/log/
-rw-------  1 root  root        0 2月  22 03:21 cron-20150301
-rw-------  1 root  root        0 3月   1 03:20 cron-20150308
-rw-------  1 root  root        0 3月   8 03:19 cron-20150315
-rw-------  1 root  root        0 3月  15 03:35 cron-20150322
-rw-------  1 root  root     5740 3月  28 22:10 cron-20150328

看下logrotate配置文件

技术分享

配置文件非常简单,也通俗易懂,一会在说下每个参数的意思,可以看到include /etc/logrotate.d,看看这个目录下有个咩?

root@qa-qding-qdingnet. /var/log# ll /etc/logrotate.d/
总用量 40
-rw-r--r--. 1 root root  103 10月  3 2012 dracut
-rw-r--r--  1 root root  185 8月  15 2014 httpd
-rw-r--r--. 1 root root  173 6月  22 2012 iscsiuiolog
-rw-r--r--  1 root root  112 3月  28 22:05 market
-rw-r-----  1 root named 170 10月 15 21:28 named
-rw-r--r--  1 root root  136 8月  23 2010 ppp
-rwxr-xr-x  1 root root  452 11月  8 03:43 salt
-rw-r--r--  1 root root  210 12月 10 18:05 syslog
-rw-r--r--  1 root root  100 2月   4 2013 wpa_supplicant
-rw-r--r--  1 root root   87 10月 16 23:15 yum

关于crontab的log是写在syslog里得,所以我们继续看下syslog的配置文件吧

技术分享我们都知道syslog管理者cron mail message secure这些日志

貌似刚才logrotate的主配置文件截图没截完整 哈哈,那说一个实力吧 一个tomcat的日志分割,一个nginx的日志分割

vim /etc/etc/logrotate.d/tomcat
/data/market_tomcat/logs/catalina.out {   #定义日志的位置,当然也可以写多个就像syslog那样子
    rotate 30                             #保留归档30天~不解释,你懂得 就是分割之后保留一个月
    daily                                 #每天分割
    copytruncate                          #表示此方法采用的是先拷贝再清空的方式
    missingok                             #表示如果找不到log文件也没OK
    notifempty                            #表示如果log文件是空的,就不进行rotate
}

保存退出,我们执行下/usr/sbin/logrotate -f /etc/logrotate.conf在看下tomcat目录下的日志文件

root@Py /data/market_tomcat/logs# ll catalina.out-20150328
-rw-r--r-- 1 root root 233079086 3月  28 22:05 catalina.out-20150328

nginx的例子:

   /data/logs/qa.qding.qdingnet_accesslog {
           daily
           missingok
           rotate 5
           notifempty
           sharedscripts
           postrotate
                   [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
          endscript
  }

无非就是加了一个shell命令,重启nginx滴。你懂得


参数说明

参数 功能  

  compress 通过gzip 压缩转储以后的日志  

  nocompress 不需要压缩时,用这个参数  

  copytruncate 用于还在打开中的日志文件,把当前日志备份并截断  

  nocopytruncate 备份日志文件但是不截断  

  create mode owner group 转储文件,使用指定的文件模式创建新的日志文件  

  nocreate 不建立新的日志文件  

  delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩  

  nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。  

  errors address 专储时的错误信息发送到指定的Email 地址  

  ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。  

  notifempty 如果是空文件的话,不转储  

  mail address 把转储的日志文件发送到指定的E-mail 地址  

  nomail 转储时不发送日志文件  

  olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统  

  noolddir 转储后的日志文件和当前日志文件放在同一个目录下  

  prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行  

  postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行  

  daily 指定转储周期为每天  

  weekly 指定转储周期为每周  

  monthly 指定转储周期为每月  

  rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份  

  tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~  

  size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).  



哦对了。我们可以看下/etc/cron.daily/logrotate脚本, 这个每天会主动帮忙进行日志的备份

本文出自 “秋小秋” 博客,请务必保留此出处http://heygirl32895.blog.51cto.com/7623150/1626043

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。