利用logrotate和crontab做日志的自动转储
一、logrotate主要用来对日志进行转储
logrotate是linux的自带命令,一般都会装有
-
logrotate -s statefile conffile
logrotate命令后面可以接一个state文件,记录了转储的状态,最后加上参数文件,定义按照什么样的规则进行日志的转储 -
Linux系统中有每日执行转储的脚本可以查看参考
注意看下参数文件说明
上面有定义了执行周期、保存时间、是否压缩、转储文件名等,自定义的参数文件在/etc/logrotate.d目录下,例如:
/var/log/test.log { #指定对什么日志文件进行转储 daily compress delaycompress olddir /data/tomcatlogs/tomcat copytruncate rotate 30 size=30M dateext missingok notifempty create 644 admin admin #创建新文件的归属和权限 dateext dateformat _%Y-%m-%d-%s }
- daily 按天进行生成 daily monthly
- compress 通过gzip 压缩转储以后的日志
- delaycompress 延迟压缩
- olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
- copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
- rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
- size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
- dateext 文件后缀是日期格式,也就是切割后文件是:xxx.log-20150828.gz
- missingok 如果日志不存在则忽略该警告信息
- notifempty 如果是空文件的话,不转储
- create 表示日志被移动后,是否在原地要再建立一个日志,这个很重要,不然写不进去新内容
- dateext 切换后的日志文件会附加上一个短横线和YYYYMMDD格式的日期,没有这个配置项会附加一个小数点加一个数字序号.
- dateformat 配合dateext使用可以为切割后的日志加上YYYYMMDD格式的日期,如dateformat -%Y%m%d
-
以下为强制执行
logrotate -f /etc/logrotate.d/test-log
-
如果先测试用,可以使用 -d
logrotate -d /etc/logrotate.d/test-log
二、crontab用来做定时任务
- 虽然在logrotate里面可以定义执行周期,但是可能不能满足实际需要,需要配合crontab定时任务来执行
- 实例对/var/log/nginx.log日志文件进行转储,写满10M就进行转储,最多保存5个文件。
若直接调用原有脚本和参数文件,即使是每5分钟执行一次,也会因为文件名的问题而报错,建议将原有的脚本和参数文件复制出来进行修改:mkdir -p /u01/script/ && cp /etc/cron.daily/logrotate /u01/script/ && cp /etc/logrotate.conf /u01/script
vim /u01/script/logrotate
修改后面的调用的参数文件为"/u01/script/logrotate.conf"vim /u01/script/logrotate.conf
将其中#dateext注释掉crontab -e
添加定时任务:
*/5 * * * * /u01/script/logrotate- 创建自定义参数文件,
vim /etc/logrotate.d/logwire
,添加如下内容:
/var/log/nginx.log { missingok compress copytruncate size=10M rotate 5 create 0600 root root }