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
原文地址:http://heygirl32895.blog.51cto.com/7623150/1626043