1 logrotate原理
一般在服务器初始化的时候这些工具都已经存在的,服务的主配置文件:/etc/logrotate.conf,在主配置中可以看到 include /etc/logrotate.d 说明可以将用户定义的配置直接放到这下面,系统会自动为我们执行。logrotate的原理就是一个cron job;每天定时触发执行对应脚本;可在系统日志中查看到相关执行的日志信息。
2 logrotate每小时切割日志
logrotate切割nginx日志,创建nginx的日志切割文件,放在目录/etc/logrotate.d下面。
vim /etc/logrotate.d/nginx
# 添加以下配置
/usr/local/openresty/nginx/logs/*.log
/usr/local/nginx/logs/*.log {
hourly
missingok
rotate 7
dateext
notifempty
nocompress
create 640 root root
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
fi
endscript
}
参数详解:
compress | 日志轮替时候对旧日志就行 gzip 压缩 |
nocompress | 不压缩 |
daily | 按天轮替 |
dateext | 使用当前日期命名旧日志 |
dateformat .%s | 对日期进行格式定制 |
ifempty | 日志没有内容的时候也进行轮替 |
notifempty | 日志是空的就不轮替 |
将轮替后的文件发送到指定E-mail地址 | |
nomail | 不发邮件 |
copytruncate | 轮替时候先拷贝日志,备份拷贝文件,在清空本来的文件,这样不会导致轮替后原文件消失,缺点就是可能丢失小部分日志 |
monthly | 一个月轮替一次 |
olddir | 轮替后日志文件放入指定的目录 |
rotate | 轮替最多保留之前的数据几次 |
size | 当日志增长到指定大小的时候开始轮替 |
weekly | 按周轮替 |
yearly | 按年轮替 |
Missingok | 如果日志丢失,不报错继续滚动下一个日志 |
配置logrotate执行周期
把/etc/cron.daily/logrotate执行文件拷贝到目录/etc/cron.hourly即可,logrotate会每小时执行一次切割操作。
注意:hourly 表明每小时执行,必须要配置,因为放在/etc/cron.daily下面的任务每天才触发一次,它每次触发会读取/etc/logrotate.d/mylog配置,虽然它识别出这里配置了hourly,但是调用者本身每天才调用一次